2012-11-26 2 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はJSoupがHTMLではないXMLパーサーである

答えて

1

私が使用し、

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

よくできました! Upvoted !!実際、ソースXMLには問題がありました。私の答えを参照し、あなたに質問や懸念があれば教えてください。 –

-1

上に指定されたXMLを有しています。 XMLでは、JAXBまたはSAXONまたはXstreamを使用できます。

+0

チェックアウトhttp://jsoup.org/news/release-1.6.2 – Linda

+0

ああありがとうございました。私はそれを知らなかったので、バグかもしれません。単純なxmlパーサは単純すぎます:) – fatfredyy

2

は、あなたのパッチワークがあなたのために働いているが..私は、名前空間に知識を与えるしたいと思います!

XML内のw:は、実際には名前空間接頭辞と呼ばれます。また、ネームスペースプレフィックスを使用するには、ルートノードで宣言する必要があります。 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

@Kate、私はそれを推測しました!まあ。うれしいことがわかった:) –

17

":"を "|"に置き換えてください。

doc.select("w|r"); 

私はJsoup 1.5.2を使用しています。

+0

コンテンツに「:」がある場合、これはうまくいかない。例:http://www.google.co.jp置き換えると、http://www.google.com –

+0

これで問題が解決しました。ありがとう。 –

+0

顔のAPIドキュメント:https://jsoup.org/apidocs/org/jsoup/select/Selector.html –

関連する問題