繁体   English   中英

Jsoup:xml标记中冒号时的SelectorParseException

[英]Jsoup : SelectorParseException when colon in xml tag

当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

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

doc.select("w|r");

我正在使用Jsoup 1.5.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+:声明Namespace的元素。命名空间对其自身及其子节点有效。在root下声明命名空间使命名空间对XML Document中的所有元素有效/可用。

我用了,

 documentXmlString = documentXmlString.replaceAll("w:","w");

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM