在TinyXml中有类似GetTextNode的东西吗?

时间:2014-09-16 16:49:11

标签: c++ tinyxml

在我当前的项目中,我必须使用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)我还没找到?

1 个答案:

答案 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");