2016-08-11 23 views
1

私は、タグの本を持って、私は2つのノードを読み出すDOM4J選択子ノード

CCUSTBLS_KundennummerBLS

CCOMP_MandantFIBU

この後、私は、ノード "Lieferadresse" を持っています。今、私はノード "Lieferadresse"を反復するループが必要です。私の問題は、最初の "Lieferadresse"の子どもだけでなく、すべての子どもがすべて "Lieferadresse"を形成していることを見ていることです。私のXパスは間違っていると思う。

<?xml version="1.0" encoding="utf-8"?> 
<eDoc> 
    <book> 
     <CCUSTBLS_KundennummerBLS>1143</CCUSTBLS_KundennummerBLS> 
     <CCOMP_MandantFIBU>1</CCOMP_MandantFIBU> 
     <Lieferadresse> 
      <TSHIPBLS_NrLieferadresse>1</TSHIPBLS_NrLieferadresse> 
      <TCUSTBLS_Kunde>1143</TCUSTBLS_Kunde> 

     </Lieferadresse> 
     <Lieferadresse> 
      <TSHIPBLS_NrLieferadresse>2</TSHIPBLS_NrLieferadresse> 
      <TCUSTBLS_Kunde>1143</TCUSTBLS_Kunde> 

     </Lieferadresse> 
     <Lieferadresse> 
      <TSHIPBLS_NrLieferadresse>3</TSHIPBLS_NrLieferadresse> 
      <TCUSTBLS_Kunde>1143</TCUSTBLS_Kunde> 

     </Lieferadresse> 
    </book> 
</eDoc> 

Javaクラス

List<Node> nodes = document.selectNodes("/eDoc/book/child::*"); 
    List<Node> list = nodes; 

    for (Node node : list) { 
     String nodeName = node.getName(); 

     if("Lieferadresse".equals(nodeName)){ 
      List<Node> nodesDelivery = document.selectNodes("//"+nodeName+"/child::*"); 
      System.out.println("------------------------------------------------------"); 
      for(Node nodeDelivery : nodesDelivery){ 
       System.out.println(nodeDelivery.getName() + " " +nodeDelivery.getText()); 
      } 

     }else{ 
      System.out.println(nodeName + " " +node.getText()); 
     } 

    } 

結果:

Root element :eDoc 
CCUSTBLS_KundennummerBLS 1143 
CCOMP_MandantFIBU 1 
------------------------------------------------------ 
TSHIPBLS_NrLieferadresse 1 
TCUSTBLS_Kunde 1143 
TSHIPBLS_NrLieferadresse 2 
TCUSTBLS_Kunde 1143 
TSHIPBLS_NrLieferadresse 3 
TCUSTBLS_Kunde 1143 
------------------------------------------------------ 
------------------------------------------------------ 
TSHIPBLS_NrLieferadresse 1 
TCUSTBLS_Kunde 1143 
TSHIPBLS_NrLieferadresse 2 
TCUSTBLS_Kunde 1143 
TSHIPBLS_NrLieferadresse 3 
TCUSTBLS_Kunde 1143 
------------------------------------------------------ 
------------------------------------------------------ 
TSHIPBLS_NrLieferadresse 1 
TCUSTBLS_Kunde 1143 
TSHIPBLS_NrLieferadresse 2 
TCUSTBLS_Kunde 1143 
TSHIPBLS_NrLieferadresse 3 
TCUSTBLS_Kunde 1143 
------------------------------------------------------ 

答えて

2

相対パス*を使用しnode可変例えば上selectNodesメソッドを呼び出しますnode.selectNodes("*")http://dom4j.sourceforge.net/dom4j-1.6.1/apidocs/org/dom4j/Node.html#selectNodes(java.lang.String))。子要素に興味があることがわかっている場合は、先にElementノードにキャストすると、node.elements()http://dom4j.sourceforge.net/dom4j-1.6.1/apidocs/org/dom4j/Element.html#elements())にアクセスできます。

+0

Mhm私は今カウンタを使用しています。これは大丈夫だと思いますか?リスト nodesLeiferadresse = node.selectNodes( "Lieferadresse [" + counterDeliveryAdress + "]"); ' – Deceptio

関連する問題