Xerces DOMNode 返回节点名称为 #Text

3
我使用Xerces C++ API编写了一个XML解析器。我有一个用于获取节点值的方法,似乎工作不稳定,我不确定原因。
我是XML新手,如果术语不正确请见谅。
例如,我可以成功地验证解析以下XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<RequestMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../schema/Config.xsd">
  <MsgHeader>
    <MessageID>0</MessageID>
    <Gic>0000</Gic>
    <Fcg>1</Fgc>
    <EventID>0</EventID>
  </MsgHeader>
  <PrimaryRate>
    <Rate>MAX_RATE</Rate>
    <Value>1</Value>
  </PrimaryRate>
  <SecondaryRate>
    <Rate>MAX_RATE</Rate>
    <Value>2</Value>
  </SecondaryRate>
 <Mode>Enable</Mode>
 <Toggle>On</Toggle>
</RequestMessage>

假设我想查找“MsgHeader”下的“Fgc”值。使用DOMNode::getNodeName(),我可以成功获取消息头的节点名称,并且我可以使用DOMNodeList获取所有子节点,并循环遍历它们。但是,在遍历子节点并使用DOMNode::getNodeName()打印其节点名称时,字符串#Text会被打印出来。尝试使用DOMNode::getNodeValue()或DOMNode::getTextContent()获取值时,字符串为空。
例如:
xercesc::DOMNodeList *list = DOMDoc->getElementsByTagName(tagname);

for(XMLSize_t i=0; i<list->getLength(); i++) {
   if(list->item(i)->hasChildNode()) {
      xercesc::DOMNodeList *children = nodeList->item(i)->getChildNodes();
      for(XMLSize_t j=0; j<list->getLength(); j++) {
         xercesc::DOMNode *node = list->item(j);
         XMLCh *name = node->getNodeName();
         XMLCh *value = node->getNodeValue();
         XMLCh *text = node->getTextContent();  
         cout << "Name: " << xercesc::XMLString::Transcode(name) << endl;
         cout << "Value: " << xercesc::XMLString::Transcode(value) << endl;
         cout << "Text: " << xercesc::XMLString::Transcode(text) << endl;
      }
   }
}

OUTPUT:

Name: #Text
Value:  
Text:  

任何见解都将不胜感激!
1个回答

3

默认情况下,xerces将空格(制表符、换行符和空格)视为文本节点。但是您可以将以下选项设置为解析器(从AbstractDOMParser继承):

domParser.setIncludeIgnorableWhitespace(false);

在解析过程中,空白字符将被忽略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接