【问题标题】:How to parse an XML that has HTML tags in its value using Boost ptree C++如何使用 Boost ptree C++ 解析其值中包含 HTML 标记的 XML
【发布时间】: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 &lt;std::string&gt;("Text"); 时,HTML 标记及其内容会被截断。我得到的价值是“这是我的”。

我如何解析像 这样的 HTML 标签,并通过 boost ptree 作为我价值的一部分

【问题讨论】:

    标签: html c++ xml boost


    【解决方案1】:

    从 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 解析器会将这些&amp;lt; 和&amp;gt; 转换回为您正确的文本。

    如果编码不正确,如果标签不平衡,也会遇到问题,例如

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

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

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

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

    有趣的是,同样的标记规则也适用于 stackoverflow 编辑器,我不得不返回并将我的 &lt; 以使其正确显示;-)

    【讨论】:

      猜你喜欢
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 2014-11-11
      • 2013-04-05
      • 1970-01-01
      • 2014-02-28
      相关资源
      最近更新 更多