html - 如何使用 Boost ptree C++ 解析其值中包含 HTML 标记的 XML

标签 html c++ xml boost

我想使用 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 作为我的值(value)的一部分

最佳答案

从 XML 解析器的角度来看, 之间确实没有区别。 部分因此成为属性树中的另一个属性。正确布局后,它看起来像这样:

<MsgTxt>
    <Abc>123</Abc>
    <Text>This is my 
        <b>Text</b>
    </Text>
</MsgTxt>

根据您的问题,您确实希望 是内容,而不是 XML 标记。如果是这样,您应该将其编码为内容 - 而不是标记。这很简单:

<MsgTxt>
<Abc>123</Abc>
<Text>This is my &lt;b&gt;Text&lt;/b&gt;</Text>
</MsgTxt>

XML 解析器会将那些 <> 转换回正确的文本。

使用不正确的编码,如果你有不平衡的标签,你也会遇到问题,比如

<MsgTxt>
<Abc>123</Abc>
<Text>This is my <b>Text</b><br></Text>
</MsgTxt>

这是不正确的 XML,XML 解析器将完全拒绝解析它。同样,这可以通过使用适当的内容编码来避免。

为了正确编码,请确保对以下字符进行编码:

< &lt;
> &gt;
& &amp;
" &quot;
' &apos;

有趣的是,相同的标记规则适用于 stackoverflow 编辑器,我不得不返回并将我的 < 替换为 < 以使其正确显示 ;-)

关于html - 如何使用 Boost ptree C++ 解析其值中包含 HTML 标记的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38671073/