使用不正确的属性定义解析文本

时间:2013-06-07 15:43:42

标签: html xml xslt xml-parsing

在尝试将HTML文档解析为XML时(在开头添加了xml)我遇到了标签内属性的问题。

<tr>
<td class="yfnc_tabledata1" nowrap align="right">Jun 4, 2013</td>
<td class="yfnc_tabledata1" align="right">453.22</td>
<td class="yfnc_tabledata1" align="right">454.43</td>
<td class="yfnc_tabledata1" align="right">447.39</td>
<td class="yfnc_tabledata1" align="right">449.31</td>
<td class="yfnc_tabledata1" align="right">10,454,600</td>
<td class="yfnc_tabledata1" align="right">449.31</td>
</tr> 

虽然通常没关系(因为我的xslt代码实际上没有引用它),但我收到错误:

ERROR:  'Attribute name "nowrap" associated with an element type "td" must be followed by the ' = ' character.'
ERROR:  'com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Attribute name "nowrap" associated with an element type "td" must be followed by the ' = ' character.'

所以我想知道是否有办法让它抑制/忽略这些错误。 (寻找一种不需要单独解析的方法,首先删除所有nowrap。)

(供参考,xml:http://pastebin.com/TLD4bZkq,xslt:http://pastebin.com/dPzDzeAX

1 个答案:

答案 0 :(得分:2)

您尝试处理的数据不是XML,因此XML解析器产生错误是正确的。

根据您正在使用的XSLT处理器以及如何调用它,您可以使用HTML解析器而不是XML解析器将HTML解析为DOM树,然后将其传递给XSLT处理器,而不是让处理器解析文件本身。

但请记住,XSLT期望格式良好的XML,如果解析器的输出不符合这一点,那么你就会遇到问题。例如,在Java(这是我最熟悉的)中,对于可由XSLT使用的DOM文档,它必须由名称空间感知解析器生成,即使有问题的文档实际上并没有使用任何名称空间。