如何使用 Boost ptree C++ 解析其值中包含 HTML 标记的 XML
Posted
技术标签:
【中文标题】如何使用 Boost ptree C++ 解析其值中包含 HTML 标记的 XML【英文标题】:How to parse an XML that has HTML tags in its value using Boost ptree C++ 【发布时间】:2016-07-30 06:33:50 【问题描述】:我想使用 Boost Ptree 解析以下 XML
<MsgTxt>
<Abc>123</Abc>
<Text>This is my <b>Text</b></Text>
</MsgTxt>
但是,当我遍历 XML 并使用 Message = v.second.get_value <std::string>("Text");
时,html 标记及其内容会被截断。我得到的价值是“这是我的”。
我如何解析像 这样的 HTML 标签,并通过 boost ptree 作为我价值的一部分
【问题讨论】:
【参考方案1】:从 XML 解析器的角度来看,
<MsgTxt>
<Abc>123</Abc>
<Text>This is my
<b>Text</b>
</Text>
</MsgTxt>
根据您的问题,您确实希望 是内容,而不是 XML 标记。如果是这样,您应该将其编码为内容 - 而不是标记。这很简单:
<MsgTxt>
<Abc>123</Abc>
<Text>This is my <b>Text</b></Text>
</MsgTxt>
XML 解析器会将这些&lt;
和&gt;
转换回为您正确的文本。
如果编码不正确,如果标签不平衡,也会遇到问题,例如
<MsgTxt>
<Abc>123</Abc>
<Text>This is my <b>Text</b><br></Text>
</MsgTxt>
这是不正确的 XML,XML 解析器将拒绝解析它。同样,这可以通过使用适当的内容编码来避免。
为了正确编码,请确保对以下字符进行编码:
< <
> >
& &
" "
' '
有趣的是,同样的标记规则也适用于 *** 编辑器,我不得不返回并将我的 < 以使其正确显示;-)
【讨论】:
以上是关于如何使用 Boost ptree C++ 解析其值中包含 HTML 标记的 XML的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在另一个 boost ptree 中插入一个 boost ptree 作为节点?