在我当前的项目中,我必须使用tinyXML修改几个XML文档。
我没有找到函数SetText(const char *)。我知道你必须创建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)我还没找到?
答案 0 :(得分:0)
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");