我正在解析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"/>
<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::DocumentFragment.parse(t)
事情会有所改善,但我得到了相同的结果。解析为 HTML 也会导致修改。
为什么Nokogiri解析得如此奇怪,我能做些什么来获得所需的行为?或者,我应该提交错误报告吗?目前,我正在使用正则表达式(我知道...这是一个非常有限的情况),但我相信如果我可以使用 xPath 访问内容,我的代码会更容易阅读。
XML 无效的原因是用作属性的<s>
和<s>
。替换后,Nokogiri 会正确解析这些值。感谢@Wes的帮助。