2012-01-12 5 views
2

XPathを使用してXMLファイルからXML値を取得するのに苦労しています。 XMLファイルには、次のスキーマを持っている:私はやってみました何XPathを使用したXML要素の取得

<devicesInfo> 
    <deviceInfo> 
    <deviceId>device1</deviceId> 
    <macAddress>00:21:85:C9:19:A4</macAddress> 
    <deviceType>deviceType1</deviceType> 
    <deviceClass>/Server/SSH/Linux/</deviceClass> 
    <location>location1</location> 
    <productionState>Decommissioned</productionState> 
</deviceInfo> 
<deviceInfo> 
    <deviceId>device2</deviceId> 
    <macAddress>00:21:85:C9:19:F5</macAddress> 
    <deviceType>deviceType1</deviceType> 
    <deviceClass>/Server/SSH/Linux/</deviceClass> 
    <location>location1</location> 
    <productionState>Decommissioned</productionState> 
</deviceInfo> 
</devicesInfo> 

は、以下の方法が含まれて私が作ったカスタムクラスのインスタンスを作成し、すべての最初のものである:

public NodeList getNodesList(String xmlQuery) throws XPathExpressionException { 
     NodeList nodes = null; 
     try { 
      nodes = (NodeList) xPath.evaluate(xmlQuery, doc, XPathConstants.NODESET); 
     } catch (XPathExpressionException ex) { 
      throw ex; 
     } 
     return nodes; 

    } 

このメソッドは、クエリと呼ばれている:

NodeList nodes = xmlHandler.getNodesList("/devicesInfo/deviceInfo"); 

これまでのところは良い、これは基本的にAlである長さ2、とのNodeListを返しているためl deviceInfo要素がファイル内にあります。 私が次に行うことは、それぞれの子(deviceId、macAddress、deviceType、deviceClass、location、productionState)の値を取得するために、deviceInfoを繰り返し実行することです。

私は、次の操作を実行しようとした: NodeList list = nodes.item(0).getChildNodes();

その後

System.out.println("First element is "+list.item(0).getTextContent()); 

これは私に空の文字列を与えています。私はこれを行うにしようとするものの:基本的には、インデックス「0」とインデックス「1」ではなく項目と項目を表示している

System.out.println("First element is "+list.item(1).getTextContent()); 

を、これは最初の要素の値である印刷「デバイス1」を終了します。

したがって、すべての要素の値を取得するには、インデックス1,3,5,7,9,11を使用します。私は何か間違っていることを知っている。誰でも私を助けてくれますか?

+0

'list'と' children'と 'nodes'の関係は何ですか? –

+0

それはタイプミスでした。子供は実際には「リスト」です。 –

答えて

2

<deviceInfo>要素の子要素には、いくつかの空白のみのテキストノードが含まれています。これらの要素をフィルタリングして、要素である子要素を反復処理するだけです。あるいは、要素内の空白のみのテキストノードがignoredのモードでXMLを解析する必要があります。

+0

うわー、ありがとう!これは私の問題を解決しました! このXMLファイルを生成するプロセスを作成しました。上記の問題について心配することなく、そのプロセスでXMLファイルをまだ何とかフォーマットしておくことはできますか? –

+0

@MouhammedSoueidane、私は、空白が無視できる要素を指定するためにXMLスキーマを使用する方法があると確信しています。もしそれらを使って検証していないのであれば、空白以外の文字を含まないすべてのテキストノードに一致するようにxpathクエリを作成することで、おそらく無視できる空白を最初に削除するのが最善の策だと思います。空白ノードを必要とせずにXMLをデバッグするのは難しくありません。 –

+0

問題が何であるか分かったので、これで解決しました: http://stackoverflow.com/questions/229310/how-to-ignore-whitespace-while-reading-a-file-to-produce- an-xml-dom ありがとう、たくさんの人、あなたは命の恩人でした。 –

関連する問題