gpt4 book ai didi

c++ - TinyXML 元素提取为文本

转载 作者:行者123 更新时间:2023-11-28 07:05:16 25 4
gpt4 key购买 nike

我正在尝试创建一个 XML 签名机制。我的 XML 可以像下面这样:

<Main>
<ChildType1>... </ChildType1>
<ChildType2>... </ChildType2>
</Main>

事实上,它对 Main 节点下的数据类型是不可知的。我只想计算包含在 Main 节点中的数据的 CRC,然后在 Main 上添加 signature 属性。

但是现在我写了

ostringstream ss;
{
boost::archive::text_oarchive oa(ss);
ss.str("");
try
{
TiXmlBase::SetCondenseWhiteSpace(false);

tinyxml::Document doc;
doc.LoadFile(filename.c_str());

tinyxml::Element* schemes = tinyxml::findSingleElement<SchemesSignatureException>(doc, "Main");
if (schemes == 0) throw logica_error("No Main found");

tinyxml::TinyXmlFwdIterator<tinyxml::Element> child;
for (child = child.begin(schemes); child != child.end(); ++child)
{
//the question is here, how to get the XML text of each child of the Main...
}

}
catch (exception& e)
{
throw ;
}

}
string data(ss.str());
boost::crc_32_type crc;
crc.process_bytes(data.data(), data.size());

当我遍历子项时,如何获取 XML 文本字符串,对于我的示例,第一次迭代将在 oa 中刷新“...”,在第二次迭代中刷新“...” oa ?

我试过 GetText 但它总是返回 NULL !你有想法吗?

最佳答案

最后我发现重载了 <<运算符并递归处理所有节点是一个正确的选项,所以我使用以下代码深入到节点并以我想要的格式转储到输出流中。我失去了所有尖括号信号,但这对我来说很好。

std::ostream& operator << ( std::ostream & out, tinyxml::Node * pParent)
{
using namespace tinyxml;

if ( !pParent ) return out;

TiXmlText *pText;
TiXmlAttribute * pAttrib;
int t = pParent->Type();

switch ( t )
{
case TiXmlNode::TINYXML_DOCUMENT:
break;
case TiXmlNode::TINYXML_ELEMENT:
out << pParent->Value();
pAttrib = ((tinyxml::Element*)(pParent))->FirstAttribute();
while(pAttrib)
{
out << pAttrib->Name() << pAttrib->Value();
pAttrib = pAttrib->Next();
}
case TiXmlNode::TINYXML_COMMENT:
break;
case TiXmlNode::TINYXML_UNKNOWN:
break;
case TiXmlNode::TINYXML_TEXT:
pText = pParent->ToText();
out << pText->Value();
break;
case TiXmlNode::TINYXML_DECLARATION:
break;
default:
break;
}
/*out << endl;*/
TiXmlNode * pChild;
for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling())
{
out << pChild;
}

return out;
}

关于c++ - TinyXML 元素提取为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21855659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com