首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TinyXml中有类似于TinyXml的东西吗?

在TinyXml中有类似于TinyXml的东西吗?
EN

Stack Overflow用户
提问于 2014-09-16 16:49:11
回答 1查看 154关注 0票数 0

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

我没有找到函数SetText(const *)。我知道,相反,您必须创建TiXmlText并将其链接到元素:

代码语言:javascript
复制
TiXmlElement* pParent = ...;
TiXmlText* pText = new TiXmlText(szText);
pParent->LinkEndChild(pText);

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

我也没有找到像FirstChildText()或GetTextNode()之类的东西。

代码语言:javascript
复制
TiXmlText* pText = pParent->FirstChild()->ToText();

如果pParent已经有了文本以外的其他子元素(在我的例子中是一个属性,注释-我可以忽略元素/混合模式),那么就会产生问题,所以我最终迭代了所有检查它们的Type()为TINYXML_TEXT的子元素。

是否有更好的方法来做到这一点,或者是我还没有找到的一组现有的助手函数(包括setText)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-17 20:38:46

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

代码语言:javascript
复制
if (pParent->FirstChild()) {
    pParent->RemoveChild(pParent->FirstChild());
}
pParent->LinkEndChild( new TiXmlText( "foo" ));

如果您有选择地替换文本,例如跳过您提到的注释,那么您就必须迭代。这方面没有内置的功能。但是当你找到它的时候你可以改变它。您不需要创建一个新的文本节点来更改文本:

代码语言:javascript
复制
pText->SetValue("this is my new text");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25874323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档