更改文件 XML Xerces C++ Parser 上的标记值

问题描述

我创建了一个 XML 文件,但我不知道如何更改此文件上的标签文本值。 我也可以获取节点文本值并且可以更改它,但是我如何在文件上写入此修改

    xercesc_3_2::XMLPlatformUtils::Initialize();

    parser = new xercesc_3_2::XercesDOMParser();

    parser->parse(xmlFile);

    xercesc_3_2::DOMDocument* doc = parser->getDocument();

    xercesc_3_2::DOMNodeList* child = doc-getElementsByTagName(xercesc_3_2::XMLString::transcode("A")); 

   xercesc_3_2::DOMNode* currentNode = child->item(i);
   if (currentNode->getNodeType() && currentNode->getNodeType() == xercesc_3_2::DOMNode::ELEMENT_NODE) {
                currentNode->setTextContent(xercesc_3_2::XMLString::transcode("3000"));

解决方法

void changeXMLNodevalue(std::string fileName,std::string node,std::string value) {

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(node.c_str()),//"/dgml/document/head/zoom/maximum"),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(value.c_str()));// "3000"));
        const XMLCh* a = result->getNodeValue()->getFirstChild()->getNodeValue();
        char* tttt = (char*)a;
        cout << "Node value: " << tttt << endl;
    
}

xercesc_3_2::XMLPlatformUtils::Terminate();
return;
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...