在我当前的项目中,我必须使用tinyXML修改几个XML文档。
我找不到函数SetText(const char*)。我知道你必须创建TiXmlText并将其链接到元素:
TiXmlElement* pParent = ...;
TiXmlText* pText = new TiXmlText(szText);
pParent->LinkEndChild(pText);
但是,如果节点已经有一个Text子节点,根据我的理解,我必须修改它的值。
我也没有找到像FirstChildText()或GetTextNode()之类的东西。我想使用这行
TiXmlText* pText = pParent->FirstChild()->ToText();
如果pParent已经有了除text之外的其他子项(在我的情况下是一个属性,注释-我可以忽略元素/混合模式),将导致问题,所以我最终迭代了所有子项,并将其Type()检查为TINYXML_text。
有没有更好的方法可以做到这一点,或者我还没有找到一组现有的帮助函数(包括setText)?
SetText(),但TinyXML-1不支持。它没有"智能",并假定FirstChild是一个文本节点。如果你知道没有子节点,或者只有一个子文本节点,那么与SetText()几乎等价的是:
if (pParent->FirstChild()) {
pParent->RemoveChild(pParent->FirstChild());
}
pParent->LinkEndChild( new TiXmlText( "foo" ));
如果您有选择地替换文本,例如跳过您提到的注释,那么您必须迭代。没有内置的功能。但你可以在找到文本时更改它。你不需要创建一个新的文本节点来更改文本:
pText->SetValue("this is my new text");