2012-11-26 25 views
8

异常被抛出时,XML标签有冒号,Jsoup:SelectorParseException当结肠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具有上面

回答

1

我用,

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

好工作! Upvoted!这确实是源XML的问题。请参阅我的答案,并让我知道,如果您有任何问题或疑虑。 –

-1

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

+0

结帐http://jsoup.org/news/release-1.6.2 – Linda

+0

噢谢谢:)我不知道,所以它可能是一个错误,或简单的XML解析器太简单:) – fatfredyy

2

虽然你的错落有致已经为你工作。我想给知识的命名空间!

你的XML中的w:实际上被称为命名空间前缀。并且要使用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文档中的所有元素。

+0

非常感谢aravind。但我无法用namesapce更改我的输入xml文件。但是,这些信息很有用。 – Linda

+0

@凯特,我猜到了!好。很高兴你发现它有用:) –

17

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

doc.select("w|r"); 

我正在使用Jsoup 1.5.2。

+0

如果内容有“:”,那么这是行不通的。例如:http://www.google.com。如果替换它,它将变成http://www.google.com –

+0

这解决了我的问题。谢谢。 –

+0

面向API的文档:https://jsoup.org/apidocs/org/jsoup/select/Selector.html –