2

私のXML構造は次のようなものです:

<rss>
     <channel>
         <yweather:location city="Paris" region="" country="France"/>
         <yweather:units temperature="C" distance="km" pressure="mb" speed="km/h"/>
         <yweather:wind chill="-1" direction="40" speed="11.27"/>
         <yweather:atmosphere humidity="87" visibility="9.99" pressure="1015.92" rising="0"/>
         <yweather:astronomy sunrise="8:30 am" sunset="4:54 pm"/>
     </channel>
</rss>

dom4jを使用して解析しようとしたとき

 SAXReader xmlReader = createXmlReader();
 Document doc = null;
 doc = xmlReader.read( inputStream );//inputStream is input of function
 log.info(doc.valueOf("/rss/channel/yweather:location/@city"));

 private SAXReader createXmlReader() {
    Map<String,String> uris = new HashMap<String,String>();
    uris.put( "yweather", "http://xml.weather.yahoo.com/ns/rss/1.0" );
    uris.put( "geo", "http://www.w3.org/2003/01/geo/wgs84_pos#" );

    DocumentFactory factory = new DocumentFactory();
    factory.setXPathNamespaceURIs( uris );

    SAXReader xmlReader = new SAXReader();
    xmlReader.setDocumentFactory( factory );
    return xmlReader;
}

しかし、cmd には何もありませんが、doc.asXML() を出力すると、XML 構造が正しく出力されます!

4

2 に答える 2

0

XMLとXPathの両方に、宣言されていない名前空間プレフィックスがあります。

xmlns:yweatherXMLに適切な宣言を追加し、setNamespaceURIsを使用してXPathで使用できるようにします。

于 2012-12-08T10:27:24.153 に答える
0

@D3GAN あなたが書いたものはすべて問題ありません。コードに問題はありません。問題は、コードに必要なライブラリがすべて含まれていないことです。

jaxen ライブラリをクラス パスに追加する必要があります。おそらく NoClassdefFoundError が発生します。元のdom4jディストリビューションには、jaxen.jar が含まれています (依存関係フォルダー内)。

私も同じ間違いをしました。dom4j を追加したところ、コードが機能しませんでした。ドキュメントが空になりました。しかし、jaxen依存関係を追加すると、正常に機能し始めました。

JAR ファイルのインストール方法がわからない場合は、ここにアクセスしてください: http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29

于 2014-04-25T19:22:38.660 に答える