Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xerces DOMNode以#文本形式返回节点名称 我使用XRCES+C++ API编写了XML解析器。我有一种获取节点值的方法,这种方法似乎是间歇工作的,我不知道为什么_C++_Xml_Xerces - Fatal编程技术网

Xerces DOMNode以#文本形式返回节点名称 我使用XRCES+C++ API编写了XML解析器。我有一种获取节点值的方法,这种方法似乎是间歇工作的,我不知道为什么

Xerces DOMNode以#文本形式返回节点名称 我使用XRCES+C++ API编写了XML解析器。我有一种获取节点值的方法,这种方法似乎是间歇工作的,我不知道为什么,c++,xml,xerces,C++,Xml,Xerces,我是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> &

我是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>

0
0000
1.
0
最高税率
1.
最高税率
2.
使可能
在…上
比如说,我在“MsgHeader”下寻找“Fgc”的值。我可以使用DOMNode::getNodeName()成功地获取消息头的节点名,并且我可以获取DOMNodeList中的所有子节点并循环它们。但当我循环遍历子节点并使用DOMNode::getNodeName()打印出它们的节点名时,字符串#文本被打印出来。尝试使用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:  
xercesc::DOMNodeList*list=DOMDoc->getElementsByTagName(标记名);
对于(XMLSize_t i=0;igetLength();i++){
如果(列表->项目(i)->hasChildNode()){
xercesc::DOMNodeList*children=nodeList->item(i)->getChildNodes();
对于(XMLSize_t j=0;jgetLength();j++){
xercesc::DOMNode*node=list->item(j);
XMLCh*name=node->getNodeName();
XMLCh*value=node->getNodeValue();
XMLCh*text=node->getTextContent();

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

并且在解析过程中忽略空白

domParser.setIncludeIgnorableWhitespace(false);