【问题标题】:Xerces DOMNode returns node name as #TextXerces DOMNode 返回节点名称为#Text
【发布时间】:2017-04-12 21:37:53
【问题描述】:

我使用 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:  

任何见解将不胜感激!

【问题讨论】:

    标签: c++ xml xerces


    【解决方案1】:

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

    domParser.setIncludeIgnorableWhitespace(false);
    

    并且在解析过程中忽略空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多