2012-11-26 6 views
8

eccezione viene generata quando tag XML ha due punti,Jsoup: SelectorParseException quando i due punti in tag XML

Eccezione:

org.jsoup.select.Selector $ SelectorParseException: Impossibile analizzare query 'w: r ': token imprevisto al ': r'

XML:

<w:r> 
<w:rPr> 
    <w:rStyle w:val="jid"/> 
</w:rPr> 
<w:t>AN</w:t> 
</w:r> 

Codice Java:

org.jsoup.nodes.Document doc = Jsoup.parse(documentXmlString); 

Qui documentXmlString ha il XML specificato sopra

risposta

1

ho usato,

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

buon lavoro! Venerato !! In effetti era un problema con l'XML di origine. Per favore riferisci la mia risposta e fammi sapere se hai qualche domanda o dubbio .. –

-1

JSoup è un non html un parser XML. Per XML puoi usare JAXB o SAXON o Xstream.

+0

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

+0

Oh grazie :) Non lo sapevo, quindi potrebbe essere un bug in esso, o semplice parser xml è troppo semplice :) – fatfredyy

2

Anche se il vostro patchwork ha lavorato per voi .. Vorrei fornire le conoscenze su spazio dei nomi!

lo w: nel tuo XML è in realtà chiamato prefisso dello spazio dei nomi. E per usare il prefisso neamespace deve essere dichiarato nel nodo radice! 1+ Poiché la parte della dichiarazione mancava nel codice XML di origine! parser stava lanciando un errore! Di seguito è riportato il modo per definire lo spazio dei nomi in XML! Ho corretto il tuo XML, scommetto che non sarebbe un errore ora!

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

Ulteriori informazioni:

Lo spazio dei nomi ha il suo ambito di applicazione! nell'esempio seguente:

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

Nell'esempio di cui sopra, non è possibile utilizzare il prefisso dello spazio dei nomi su <someotherElement> o <dummychild/> !! perché l'ambito del prefisso dello spazio dei nomi w è fino all'elemento <r> e solo al suo figlio (nipote)!


1+: l'elemento in base al quale spazio dei nomi è dichiarato .. lo spazio dei nomi sarà valido per se stesso ei suoi nodi figlio .. Dichiarare namespace sotto root fa dello spazio dei nomi validi/disponibile per tutti gli elementi nel documento XML.

+0

Grazie mille aravind. Ma non posso cambiare il mio file xml di input con namesapce. Tuttavia l'informazione è utile. – Linda

+0

@Kate, ho indovinato! Bene. Sono contento che tu l'abbia trovato utile :) –

17

Basta sostituire ":" con "|"

doc.select("w|r"); 

Sto usando Jsoup 1.5.2.

+0

Se il contenuto ha ":", allora questo non può funzionare. esempio: http://www.google.com. Se lo sostituisci, diventa http | //www.google.com –

+0

questo ha risolto il mio problema. Grazie. –

+0

Documenti API in faccia: https://jsoup.org/apidocs/org/jsoup/select/Selector.html –