http://xerces.apache.org/xerces-c/program-dom-3.html#UsingDOMAPI
有三种解析器:XercesDOMParser,DOMLSParser,DOMLSSerializer。
三个有用的类:
DOMDocument* myDocument; DOMNode* aNode; DOMText* someText;
举例:
XMLPlatformUtils::Initialize();
parser = new XercesDOMParser();
parser->setValidationScheme( XercesDOMParser::Val_Always );
parser->setDoNamespaces( true ); // optional
设置错误处理
ErrorHandler* err_Handler = (ErrorHandler*) new HandlerBase();
parser->setErrorHandler( err_Handler );
// reset document pool
parser->resetDocumentPool();
解析方式:
- parser->parse(xml_file); // std::string xml_file_name;
- MemBufInputSource myxml_buf((const XMLByte*)xmlbuf,strlen(xmlbuf), "test"); parser->parse(myxml_buf);
解析结果:
XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *doc = 0;
doc = parser->getDocument();
DOMNode* root = (DOMNode*) doc->getDocumentElement();
DOMNode *child = 0;
for (child = root->getFirstChild(); child != 0; child = child->getNextSibling())
{
if (child->getNodeType() != DOMNode::ELEMENT_NODE) ............
{
if (child->getNodeType() != DOMNode::ELEMENT_NODE) ............
char * xml_string = XMLString::transcode(child->getNodeName());
DOMNamedNodeMap *pAttributes = child->getAttributes(); ---------------- 取属性表
const XMLCh *attrDef = XMLString::transcode(attr_name); ---------------- 把属性名字符串转变一下存起来;
DOMNode *node = pAttributes->getNamedItem(attrDef); ----------------- 根据属性名取出属性
XMLString::release((XMLCh**) (&attrDef)); ---------------- 记得和XMLString::transcode配对使用,否则内存泄露。
DOMNode *node = pAttributes->getNamedItem(attrDef); ----------------- 根据属性名取出属性
XMLString::release((XMLCh**) (&attrDef)); ---------------- 记得和XMLString::transcode配对使用,否则内存泄露。
char *pc = XMLString::transcode(node->getNodeValue()); ---------------- 把属性转变为char *
注:XMLString::transcode有三种可能的返回值:bool,char *,XMLCh*;release有两种输入值char**,XMLCh** buf。