代码之家  ›  专栏  ›  技术社区  ›  Chris

TinyXml中是否有类似GetTextNode的内容?

  •  0
  • Chris  · 技术社区  · 10 年前

    在我当前的项目中,我必须使用tinyXML修改几个XML文档。

    我没有找到函数SetText(constchar*)。我知道你必须创建TiXmlText并将其链接到Element:

    TiXmlElement* pParent = ...;
    TiXmlText* pText = new TiXmlText(szText);
    pParent->LinkEndChild(pText);
    

    但是,如果节点已经有一个Text子节点,根据我的理解,我必须修改它的值。

    我也没有找到类似FirstChildText()或GetTextNode()之类的内容

    TiXmlText* pText = pParent->FirstChild()->ToText();
    

    如果pParent已经有文本以外的其他子级(在我的例子中是一个属性,注释-我可以忽略元素/混合模式),则会导致问题,因此我最终遍历了所有子级,检查其Type()是否为TINYXML_text。

    是否有更好的方法来实现这一点,或者可能是我尚未找到的一组现有的帮助函数(包括setText)?

    1 回复  |  直到 10 年前
        1
  •  0
  •   grinliz    10 年前

    TinyXML-2支持SetText(),但TinyXML-1不支持。它没有“智能”,并假设FirstChild是一个文本节点。如果您知道没有子节点,或者只有一个子文本节点,那么几乎等同于SetText()的是:

    if (pParent->FirstChild()) {
        pParent->RemoveChild(pParent->FirstChild());
    }
    pParent->LinkEndChild( new TiXmlText( "foo" ));
    

    如果您有选择地替换文本,例如跳过您提到的注释,那么您必须进行迭代。没有内置的功能。但您可以在找到文本时更改它。您不需要创建新的文本节点来更改文本:

    pText->SetValue("this is my new text");