gpt4 book ai didi

c++ - Xerces DOMNode 将节点名称返回为#Text

转载 作者:行者123 更新时间:2023-11-30 03:36:06 28 4
gpt4 key购买 nike

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

任何见解将不胜感激!

最佳答案

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

domParser.setIncludeIgnorableWhitespace(false);

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

关于c++ - Xerces DOMNode 将节点名称返回为#Text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40856601/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com