在我的当前项目中,我必须使用tinyXML修改几个XML文档。
我没有找到函数SetText(const *)。我知道,相反,您必须创建TiXmlText并将其链接到元素:
TiXmlElement* pParent = ...;
TiXmlText* pText = new TiXmlText(szText);
pParent->LinkEndChild(pText);但是,如果节点已经有一个文本子节点,根据我的理解,我必须修改它的值。
我也没有找到像FirstChildText()或GetTextNode()之类的东西。
TiXmlText* pText = pParent->FirstChild()->ToText();如果pParent已经有了文本以外的其他子元素(在我的例子中是一个属性,注释-我可以忽略元素/混合模式),那么就会产生问题,所以我最终迭代了所有检查它们的Type()为TINYXML_TEXT的子元素。
是否有更好的方法来做到这一点,或者是我还没有找到的一组现有的助手函数(包括setText)?
发布于 2014-09-17 20:38:46
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");https://stackoverflow.com/questions/25874323
复制相似问题