簡體   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