【问题标题】:Change tag value on file XML Xerces C++ Parser更改文件 XML Xerces C++ 解析器上的标记值
【发布时间】:2021-02-18 14:38:03
【问题描述】:

我创建了一个 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"));

【问题讨论】:

    标签: c++ c xml xerces-c


    【解决方案1】:
    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 2013-01-13
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多