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");

Jsoup1.5.2を使用しています。

于 2013-02-07T17:10:48.360 に答える
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>上記の例では、名前空間プレフィックスをor <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 は XML パーサーではなく html です。XML の場合、JAXB、SAXON、または Xstream を使用できます。

于 2012-11-26T06:57:08.977 に答える