xerces:如何获取带有特定标签的 xml 节点?
xerces: how to take xml node with a particular tag?
通过 Qt 库,我可以获取具有特定标签名称的节点:
QDomElement tmp = root.firstChildElement("A");
QDomElement tt = tmp.firstChildElement("C");
具有以下结构的 xml 文件:
<A>
<B></B>
<C></C>
</A>
使用 xerces,我该怎么做?
xercesc_3_2::XMLPlatformUtils::Initialize();
// create the DOM parser
xercesc_3_2::XercesDOMParser* parser = new xercesc_3_2::XercesDOMParser;
parser->setValidationScheme(xercesc_3_2::XercesDOMParser::Val_Never);
parser->parse(fileName.c_str());
// get the DOM representation
xercesc_3_2::DOMDocument* doc = parser->getDocument();
// get the root element
xercesc_3_2::DOMElement* root = doc->getDocumentElement();
// evaluate the xpath
xercesc_3_2::DOMXPathResult* result = doc->evaluate(
xercesc_3_2::XMLString::transcode("/doc/document/childL1/childL2/Node_to_change"), // "A/B" in the provided xml sample for change B text node value
root,
NULL,
xercesc_3_2::DOMXPathResult::ORDERED_NODE_SNAPSHOT_TYPE,
NULL);
同时更改值:
if (result->getNodeValue() == NULL)
{
cout << "There is no result for the provided XPath " << endl;
}
else
{
result->getNodeValue()->getFirstChild()->setNodeValue(xercesc_3_2::XMLString::transcode("3000"));
const XMLCh* a = result->getNodeValue()->getFirstChild()->getNodeValue();
char* tttt = (char*)a;
cout << "Node value: " << tttt << endl;
}
通过 Qt 库,我可以获取具有特定标签名称的节点:
QDomElement tmp = root.firstChildElement("A");
QDomElement tt = tmp.firstChildElement("C");
具有以下结构的 xml 文件:
<A>
<B></B>
<C></C>
</A>
使用 xerces,我该怎么做?
xercesc_3_2::XMLPlatformUtils::Initialize();
// create the DOM parser
xercesc_3_2::XercesDOMParser* parser = new xercesc_3_2::XercesDOMParser;
parser->setValidationScheme(xercesc_3_2::XercesDOMParser::Val_Never);
parser->parse(fileName.c_str());
// get the DOM representation
xercesc_3_2::DOMDocument* doc = parser->getDocument();
// get the root element
xercesc_3_2::DOMElement* root = doc->getDocumentElement();
// evaluate the xpath
xercesc_3_2::DOMXPathResult* result = doc->evaluate(
xercesc_3_2::XMLString::transcode("/doc/document/childL1/childL2/Node_to_change"), // "A/B" in the provided xml sample for change B text node value
root,
NULL,
xercesc_3_2::DOMXPathResult::ORDERED_NODE_SNAPSHOT_TYPE,
NULL);
同时更改值:
if (result->getNodeValue() == NULL)
{
cout << "There is no result for the provided XPath " << endl;
}
else
{
result->getNodeValue()->getFirstChild()->setNodeValue(xercesc_3_2::XMLString::transcode("3000"));
const XMLCh* a = result->getNodeValue()->getFirstChild()->getNodeValue();
char* tttt = (char*)a;
cout << "Node value: " << tttt << endl;
}