#include "StdAfx.h"
#include "./xmlnode.h"
namespace JWXml
{
//-------------------------------------------------------------------------
// Function Name :_GetValue
// Parameter(s) :CString & strValue OUT value
// Return :BOOL false means failed
// Memo :get the text value of the current node
// :NOTE: the node should not contain children if u invoke this method
//-------------------------------------------------------------------------
BOOL CXmlNode::_GetValue(CString & strValue OUT) const
{
ASSERT( !IsNull() );
HRESULT hr = S_OK;
try
{
BSTR bstr = NULL;
hr = m_pNode->get_text( &bstr );
ASSERT( SUCCEEDED(hr) );
strValue = (LPCTSTR)_bstr_t( bstr, true);
if( bstr != NULL )
{
SysFreeString(bstr);
bstr = NULL;
}
}
catch ( _com_error e )
{
TRACE( _T("CXmlNode::_GetValue failed:%s\n"), e.ErrorMessage());
ASSERT( FALSE );
return FALSE;
}
return SUCCEEDED(hr);
}
//-------------------------------------------------------------------------
// Function Name :_SetValue
// Parameter(s) :CString & strValue IN
// Return :BOOL false means failed
// Memo :Set the text value of the current node
//-------------------------------------------------------------------------
BOOL CXmlNode:: _SetValue(CString & strValue IN) const
{
ASSERT( !IsNull() );
HRESULT hr = S_OK;
try
{
hr = m_pNode->put_text( _bstr_t(strValue) );
ASSERT( SUCCEEDED(hr) );
}
catch ( _com_error e )
{
TRACE( _T("CXmlNode::_SetValue failed:%s\n"), e.ErrorMessage());
ASSERT( FALSE );
return FALSE;
}
return SUCCEEDED(hr);
}
//-------------------------------------------------------------------------
// Function Name :_GetAttribute
// Parameter(s) :CString & strName IN
// Return :CString & strValue OUT
// Memo :Get the attribute value
//-------------------------------------------------------------------------
BOOL CXmlNode::_GetAttribute( CString & strName IN, CString & strValue OUT) const
{
if( m_pNode == NULL )
{
ASSERT(FALSE);
return FALSE;
}
HRESULT hr = S_OK;
try
{
MSXML2::IXMLDOMNamedNodeMapPtr pIXMLDOMNamedNodeMap = NULL;
hr = m_pNode->get_attributes(&pIXMLDOMNamedNodeMap);
if( !SUCCEEDED(hr) )
{
ASSERT( FALSE );
return FALSE;
}
MSXML2::IXMLDOMNodePtr pIXMLDOMNode = NULL;
pIXMLDOMNode = pIXMLDOMNamedNodeMap->getNamedItem( _bstr_t(strName) );
if( pIXMLDOMNode == NULL )
{
strValue.Empty();
}
else
{
VARIANT varValue;
hr = pIXMLDOMNode->get_nodeValue(&varValue);
if( !SUCCEEDED(hr) )
{
ASSERT( FALSE );
return FALSE;
}
strValue = (LPCTSTR)(_bstr_t)varValue;
}
RELEASE_PTR(pIXMLDOMNode);
RELEASE_PTR(pIXMLDOMNamedNodeMap);
}
catch ( _com_error e )
{
TRACE( _T("CXmlNode::_GetAttribute failed:%s\n"), e.ErrorMessage());
ASSERT( FALSE );
return FALSE;
}
return TRUE;
}
//-------------------------------------------------------------------------
// Function Name :_SetAttribute
// Parameter(s) :CString & strName IN
// :CString & strValue IN
// Return :BOOL
// Memo :Set the attribute value
//-------------------------------------------------------------------------
BOOL CXmlNode::_SetAttribute( CString & strName IN
, CString & strValue IN
, CString & strPrefix IN
, CString & strNamespaceURI IN
) const
{
if( m_pNode == NULL )
{
ASSERT(FALSE);
return FALSE;
}
HRESULT hr = S_OK;
try
{
MSXML2::IXMLDOMDocumentPtr pDoc = NULL;
hr = m_pNode->get_ownerDocument(&pDoc);
ASSERT( SUCCEEDED(hr) );
CString strFullName;
strFullName.Format( strPrefix.IsEmpty() ? _T("%s%s") : _T("%s:%s"), strPrefix, strName);
MSXML2::IXMLDOMAttributePtr pAttribute = NULL;
pAttribute = pDoc->createNode( _variant_t(_T("attribute")), _bstr_t(strFullName), _bstr_t(strNamespaceURI) );
pAttribute->Putvalue(_variant_t(strValue));
ASSERT( pAttribute != NULL );
MSXML2::IXMLDOMElementPtr pElement = static_cast<MSXML2::IXMLDOMElementPtr> (m_pNode);
hr = pElement->setAttributeNode(pAttribute);
RELEASE_PTR(pAttribute);
RELEASE_PTR(pElement);
RELEASE_PTR(pDoc);
}
catch ( _com_error e )
{
TRACE( _T("CXmlNode::_SetAttribute failed:%s\n"), e.ErrorMessage());
ASSERT( FALSE );
return FALSE;
}
return SUCCEEDED(hr);
}
//-------------------------------------------------------------------------
// Function Name :CXmlNode
// Parameter(s) :MSXML2::IXMLDOMNodePtr pNode [in]
// Memo :constructor
//-------------------------------------------------------------------------
CXmlNode::CXmlNode( MSXML2::IXMLDOMNodePtr pNode IN)
{
m_pNode = pNode;
}
//-------------------------------------------------------------------------
// Function Name :CXmlNode
// Parameter(s) :void
// Memo :constructor
//-------------------------------------------------------------------------
CXmlNode::CXmlNode(void)
{
m_pNode = NULL;
}
//-------------------------------------------------------------------------
// Function Name :CXmlNode
// Parameter(s) :CXmlNode & refNode [in]
// Memo :constructor
//-------------------------------------------------------------------------
CXmlNode::CXmlNode( const CXmlNode & refNode IN)
{
m_pNode = refNode.m_pNode;
}
//-------------------------------------------------------------------------
// Function Name :CXmlNode
// Parameter(s) :CXmlNode & refNode [in]
// Memo :constructor
//-------------------------------------------------------------------------
CXmlNode::CXmlNode( const CXmlNodePtr pNode IN)
{
if (pNode->m_pNode != m_pNode)
{
m_pNode = pNode->m_pNode;
}
}
//-------------------------------------------------------------------------
// Function Name :~CXmlNode
// Parameter(s) :void
// Memo :destructor
//-------------------------------------------------------------------------
CXmlNode::~CXmlNode(void)
{
RELEASE_PTR(m_pNode);
}
//-------------------------------------------------------------------------
// Function Name :Release
// Parameter(s) :void
// Return :void
// Memo :release the node
//-------------------------------------------------------------------------
void CXmlNode::Release(void)
{
RELEASE_PTR(m_pNode);
}
BOOL CXmlNode::Reset(void)
{
ASSERT(m_pNode != NULL);
HRESULT hr = S_OK;
try
{
MSXML2::IXMLDOMNamedNodeMapPtr pIXMLDOMNamedNodeMap = NULL;
hr = m_pNode->get_attributes(&pIXMLDOMNamedNodeMap);
ASSERT(SUCCEEDED(hr));
if (SUCCEEDED(hr))
pIXMLDOMNamedNodeMap->reset();
ASSERT(SUCCEEDED(hr));
RELEASE_PTR(pIXMLDOMNamedNodeMap);
}
catch (_com_error e)
{
TRACE(_T("CXmlNode::RemoveAttribute failed:%s\n"), e.ErrorMessage());
ASSERT(FALSE);
return FALSE;
}
return SUCCEEDED(hr);
}
BOOL CXmlNode::Empty(void)
{
ASSERT(m_pNode != NULL);
HRESULT hr = S_OK;
try
{
MSXML2::IXMLDOMNamedNodeMapPtr pIXMLDOMNamedNodeMap = NULL;
hr = m_pNode->get_attributes(&pIXMLDOMNamedNodeMap);
ASSERT(SUCCEEDED(hr));
if (SUCCEEDED(hr))
{
long lCount;
pIXMLDOMNamedNodeMap->get_length(&lCount);
for (int i=0; i<lCount; i++)
{
MSXML2::IXMLDOMNodePtr item = NULL;
pIXMLDOMNamedNodeMap->get_item(i, &item);
}
}
ASSERT(SUCCEEDED(hr));
RELEASE_PTR(pIXMLDOMNamedNodeMap);
}
catch (_com_error e)
{
TRACE(_T("CXmlNode::RemoveAttribute failed:
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
XML-库文件.rar (5个子文件)
XmlNodes.h 924B
XmlNode.cpp 29KB
XmlNode.h 6KB
XMLFile.dll 58KB
XMLFile.lib 63KB
共 5 条
- 1
资源评论
一朵小小花
- 粉丝: 18
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功