我想使用 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 <b>Text</b></Text>
</MsgTxt>
XML 解析器会将那些 <
和 >
转换回正确的文本。
使用不正确的编码,如果你有不平衡的标签,你也会遇到问题,比如
<MsgTxt>
<Abc>123</Abc>
<Text>This is my <b>Text</b><br></Text>
</MsgTxt>
这是不正确的 XML,XML 解析器将完全拒绝解析它。同样,这可以通过使用适当的内容编码来避免。
为了正确编码,请确保对以下字符进行编码:
< <
> >
& &
" "
' '
有趣的是,相同的标记规则适用于 stackoverflow 编辑器,我不得不返回并将我的 < 替换为 <
以使其正确显示 ;-)
关于html - 如何使用 Boost ptree C++ 解析其值中包含 HTML 标记的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38671073/