java xerces 解析xml_Xerces解析XML

今天学习一下用XercesDOMParser 解析XML。简单的实现了自定义的类XdomParser,分别用DOMNodeIterator和DOMTreeWalker实现对DOM树的遍历输出。这里仅是为了简单理解XercesDOMParser的用法,至于它具体支持的属性以后再仔细研究。

class XDomParser

{

public:

XDomParser(string xmlFilePath = "");

~XDomParser();

voidParser(string xmlFilePath = "");

voidPrint();

voidPrint(DOMElement *pElement);

voidPrintByIterator(DOMNode *pNode);

voidPrintByTreeWalker(DOMNode *pNode);

DOMElement *GetRootElement();

protected:

private:

string m_filePath;

XercesDOMParser *m_pParser;

DOMElement * m_pRoot;

};

XDomParser::XDomParser(string xmlFilePath /*= ""*/):m_filePath(xmlFilePath)

{

m_pParser = newXercesDOMParser;

}

XDomParser::~XDomParser()

{

deletem_pParser;

}

//解析XML

void XDomParser::Parser(string xmlFilePath /*= ""*/ )

{

try

{

if(m_filePath.length())

{

m_pParser->parse(m_filePath.c_str());

}

elseif(xmlFilePath.length())

{

m_pParser->parse(xmlFilePath.c_str());

}

}

catch (const OutOfMemoryException&)

{

XERCES_STD_QUALIFIER cerr <

return;

}

catch (const XMLException& e)

{

XERCES_STD_QUALIFIER cerr <

return;

}

catch (const DOMException& e)

{

constunsigned intmaxChars = 2047;

XMLCh errText[maxChars + 1];

XERCES_STD_QUALIFIER cerr <

if(DOMImplementation::loadDOMExceptionMsg(e.code,errText,maxChars))

XERCES_STD_QUALIFIER cerr<< "Message is: " <<:transcode xerces_std_qualifier endl>

return;

}

catch(...)

{

XERCES_STD_QUALIFIER cerr <

return;

}

DOMDocument *pdoc =m_pParser->getDocument();

m_pRoot = pdoc->getDocumentElement(); //获取XML根节点

}

void XDomParser::Print()

{

if(m_pRoot)

{

if(m_pRoot)

{

DOMNodeList*pVersionEleList = m_pRoot->getElementsByTagName(XMLString::transcode("Name")); //获取Name节点

for(int i = 0; i < pVersionEleList->getLength();++i)

{

DOMNode *pNode =pVersionEleList->item(i);

cout<<:transcode>item(i)->getNodeName())<item(i)->getTextContent());

}

}

}

}

//输出pElement及其子节点

void XDomParser::Print(DOMElement *pElement )

{

if(pElement)

{

DOMElement *pChild =pElement->getFirstElementChild();

for(pChild ; pChild ;pChild = pChild->getNextElementSibling())

{

intchildCount = pChild->getChildElementCount();

string tagName =XMLString::transcode(pChild->getNodeName());

if(pChild->getChildElementCount())

{

cout<<:transcode>getNodeName())<

}

else

{

cout<<:transcode>getNodeName())<getTextContent())<

}

}

}

}

DOMElement* XDomParser::GetRootElement()

{

returnm_pRoot;

}

//用DOMNodeIterator实现遍历XML

voidXDomParser::PrintByIterator(DOMNode *pNode)

{

DOMDocument *pdoc =m_pParser->getDocument();

DOMNodeIterator*pIterator=pdoc->createNodeIterator(pNode,DOMNodeFilter::SHOW_ALL,NULL,true);

DOMNode *pChild =pIterator->getRoot();

for(pChild; pChild; pChild = pIterator->nextNode())

{

string tagName =XMLString::transcode(pChild->getNodeName());

if((pChild->getNodeType()== DOMNode::ELEMENT_NODE))

{

DOMElement* pElement = static_cast(pChild);

cout<<:transcode>getTagName())<getTextContent())<

}

}

}

//用DOMTreeWalker实现遍历XML

voidXDomParser::PrintByTreeWalker(DOMNode *pNode)

{

cout<<:transcode>(pNode)->getTagName())<

DOMDocument *pdoc =m_pParser->getDocument();

string tagName =XMLString::transcode(m_pRoot->getNodeName());

DOMTreeWalker*pInnerWalker=pdoc->createTreeWalker(pNode,true);

DOMNode *pChild =pInnerWalker->firstChild();

pChild = pInnerWalker->nextNode();

for(pChild; pChild; pChild = pInnerWalker->nextNode())

{

string tagName =XMLString::transcode(pChild->getNodeName());

if((pChild->getNodeType() ==DOMNode::ELEMENT_NODE))

{

DOMElement* pElement= static_cast(pChild);

if (pElement->getChildElementCount())

{

PrintByTreeWalker(pChild);

}

else

{

cout<<:transcode>getTagName())<getTextContent())<

}

}

}

}

相关文章

总结

以上是编程之家为你收集整理的Xerces解析XML全部内容,希望文章能够帮你解决Xerces解析XML所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值