Xerces C++ APIを使用してXMLパーサーを作成しました。断続的に動作するように見えるノード値を取得する方法があり、その理由がわかりません。Xerces DOMNodeは#Textとしてノード名を返します
私は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:
任意の洞察力をいただければ幸いです!