10

当xml标签有冒号时抛出异常,

例外:

org.jsoup.select.Selector$SelectorParseException:无法解析查询'w:r':':r'处的意外令牌

XML:

<w:r>
 <w:rPr>
   <w:rStyle w:val="jid"/>
 </w:rPr>
 <w:t>AN</w:t>
</w:r>

Java代码:

    org.jsoup.nodes.Document doc = Jsoup.parse(documentXmlString);

这里 documentXmlString 有上面指定的 xml

4

4 回答 4

23

只需将“:”替换为“|”

doc.select("w|r");

我正在使用 Jsoup 1.5.2。

于 2013-02-07T17:10:48.360 回答
2

尽管您的拼凑对您有用..我想提供有关名称空间的知识!

您的w:XML 中的实际称为命名空间前缀。并且要使用 neamespace 前缀,它必须在根节点中声明!1+ 由于您的源 XML 中缺少声明部分!解析器抛出错误!下面是在 XML 中定义命名空间的方法!我已经更正了您自己的 XML,我敢打赌它现在不会出错了!

<w:r xmlns:w="http://www.w3.org/SomeNamespace">
  <w:rPr>
    <w:rStyle w:val="jid"/>
  </w:rPr>
  <w:t>AN</w:t>
</w:r>

附加信息:

命名空间有自己的范围!在下面的例子中:

<root>
    <w:r xmlns:w="http://www.w3.org/SomeNamespace">
      <w:rPr>
        <w:rStyle w:val="jid"/>
      </w:rPr>
      <w:t>AN</w:t>
    </w:r>
    <someotherElement>
      <dummychild/>
    </someotherElement>

在上面的例子中,你不能在<someotherElement><dummychild/>!!上使用命名空间前缀。因为命名空间前缀 w 的范围<r>仅限于元素及其子元素(孙子元素)!


1+:在其下声明命名空间的元素。命名空间对其自身及其子节点有效。在根下声明命名空间使命名空间对 XML 文档中的所有元素有效/可用。

于 2012-11-29T14:47:12.123 回答
1

我用了,

 documentXmlString = documentXmlString.replaceAll("w:","w");
于 2012-11-27T05:24:04.413 回答
-1

JSoup 是一个 html 而不是 XML 解析器。对于 XML,您可以使用 JAXB 或 SAXON 或 Xstream。

于 2012-11-26T06:57:08.977 回答