2016-07-30 8 views
0

Ich mag analysieren, um die folgenden XML-Boost ptreeWie ein XML zu analysieren, die HTML-Tags in seinem Wert mit Boost-ptree C++

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

jedoch hat, wenn ich über die XML-iterieren und Message = v.second.get_value <std::string>("Text"); verwenden, die HTML Das Tag und sein Inhalt werden abgeschnitten. Der Wert, den ich bekomme, ist "Das ist mein".

Wie kann ich analysieren HTML-Tags wie und als Teil meines Wertes durch Auftrieb ptree

Antwort

2

Aus der Sicht des XML-Parsers gibt es wirklich keinen Unterschied zwischen < Text> und < b>. Der Abschnitt < b> wird daher nur zu einer weiteren Eigenschaft in Ihrem Eigenschaftenbaum. Richtig legte aus, es sieht aus wie diese:

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

Nach Ihrer Frage, wollen Sie wirklich die < b> Inhalt, nicht XML-Markup sein. Wenn ja, sollten Sie es als Inhalt kodieren - und nicht als Markup. Das ist einfach:

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

Der XML-Parser jene &lt; und &gt; wieder in den richtigen Text für Sie konvertieren.

Mit falsche Codierung Sie auch auf ein Problem stoßen, wenn Sie unausgeglichen Tags haben, das heißt so etwas wie

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

Dies ist falsch, XML, und der XML-Parser wird sich weigern, es überhaupt zu analysieren. Dies kann wiederum vermieden werden, indem eine geeignete Codierung des Inhalts verwendet wird.

Für die richtige Codierung, stellen Sie sicher, dass Sie die folgenden Zeichen kodieren:

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

Interessanterweise sind die gleichen Markup-Regeln hier im Stackoverflow-Editor anwenden, und ich musste gehen zurück und ersetzen meine < von &lt; zu machen es wird richtig angezeigt ;-)