0

我正在解析 Julius 的 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 访问内容,我的代码会更容易阅读。

4

1 回答 1

0

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

于 2013-10-29T08:58:41.047 回答