2013-10-29 46 views
0

当我解析XML输出从朱利叶斯停止引入nokogiri:如何更改XML解析

<RECOGOUT SOURCEID="68"> 
    <SHYPO RANK="1" SCORE="223.648865"> 
    <WHYPO WORD="" CLASSID="<s>" PHONE="silB" CM="0.972"/> 
    <WHYPO WORD="THE" CLASSID="THE" PHONE="dh iy" CM="0.640"/> 
    <WHYPO WORD="ABOUT" CLASSID="ABOUT" PHONE="ah b aw t" CM="0.167"/> 
    <WHYPO WORD="" CLASSID="</s>" PHONE="silE" CM="1.000"/> 
    </SHYPO> 
</RECOGOUT> 

当我把它变成引入nokogiri,它就会被大量修改。
puts Nokogiri::XML.parse(t) 给出:

<RECOGOUT SOURCEID="68"> 
    <SHYPO RANK="1" SCORE="223.648865"> 
    <WHYPO WORD="" CLASSID=""/><s>" PHONE="silB" CM="0.972"/&gt; 
    <WHYPO WORD="THE" CLASSID="THE" PHONE="dh iy" CM="0.640"/> 
    <WHYPO WORD="ABOUT" CLASSID="ABOUT" PHONE="ah b aw t" CM="0.167"/> 
    <WHYPO WORD="" CLASSID=""/></s>" PHONE="silE" CM="1.000"/&gt; 
    </SHYPO> 
</RECOGOUT> 

我知道,当引入nokogiri解析的东西它试图使之成为有效的修改它,但我想如果我解析它作为一个文档片段,puts Nokogiri::XML::DocumentFragment.parse(t)事情会好转,但我得到了同样的结果。解析为HTML也会导致修改。

为什么Nokogiri解析这个很奇怪,有什么我可以做得到所需的行为?或者,我是否应该提交错误报告?目前,我正在使用正则表达式(我知道...这是一个非常有限的情况),但是我确定我的代码会更容易阅读,如果我可以使用xPath访问事物。

回答

0

XML无效的原因是<s><\s>被用作属性。一旦它们被替换,Nokogiri正确解析值。感谢@Wes的帮助。