2016-03-20 32 views
0

Bu yüzden bir XML dosyasını XPath ile ayrıştırmam gerekiyor. Tüm iyi çalışır, ancak bir kereden fazla bir etiketim varsa, kodum etiket içindeki tüm aynı etiketlerin tüm alt etiketlerini görüntüler. Örneğin : iXPath Ayrıştırıcı java yedeklemesi

<a> 
    <b></b> 
</a> 
<c></c> 
<a> 
    <b></b> 
</a> 

çıkışı olacaktır vardır:

public void parseFileXPath() throws ParserConfigurationException, IOException, SAXException, XPathExpressionException { 
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
    Document doc = documentBuilder.parse(file); 
    doc.getDocumentElement().normalize(); 

    XPathFactory factory = XPathFactory.newInstance(); 
    XPath xpath = factory.newXPath(); 

    String expression; 
    Node node; 
    NodeList nodeList; 

    expression="/*"; 
    node = (Node) xpath.evaluate(expression,doc, XPathConstants.NODE); 
    //System.out.println(node.getNodeName()); 

    expression="/frogans-fsdl/*"; 
    nodeList = (NodeList) xpath.evaluate(expression,doc, XPathConstants.NODESET); 


    NodeList nodeList1; 


    for (int i = 0; i < nodeList.getLength(); i++) { 
     String aTag = nodeList.item(i).getNodeName(); 

     System.out.println(aTag); 
     expression="/frogans-fsdl/"+aTag+"/*"; 
     nodeList1 = (NodeList) xpath.evaluate(expression,doc,XPathConstants.NODESET); 

     for (int j = 0; j < nodeList1.getLength(); j++) { 

      System.out.println("\t"+nodeList1.item(j).getNodeName()); 
      //TODO 
      //Display what's inside each tag 
     } 

     expression=""; 
    } 



} 

Herhangi bir yardım edin:

a 
b 
b 
c 
a 
b 
b 

benim kod böyle?

cevap

1

aşağıdaki iç döngü kod çıktısı ne istediğinizi yardımcı olabilir:

NodeList nodeList1; 

    for (int i = 0; i < nodeList.getLength(); i++) { 
     System.out.println(nodeList.item(i).getNodeName()); 
     expression="*"; 
     nodeList1 = (NodeList) xpath.evaluate(expression,nodeList.item(i),XPathConstants.NODESET); 
     for (int j = 0; j < nodeList1.getLength(); j++) { 
      System.out.println("\t"+nodeList1.item(j).getNodeName()); 
     } 
    } 

Temelde sonraki xpath değerlendirmede ikinci argüman olarak nodeList.item (i) geçmesi gerekiyor.

+0

Çok teşekkür ederim! –

0

İlk xath, frogans-fsdl'nin tüm çocuklarını bulur. Muhtemelen a,c,a İkinci xpaht /frogans-fsdl/a/*" ile,/frogd-fsdl/a /,/frogans-fsdl/c/ve/frogans-fsdl/a// 'nın tüm çocukları için whol belgesine bakıyorsunuz.

İkinci xpaht'ınızı * olarak değiştirmeniz ve ikinci değerlendirme çağrınız için nodeList.item (i) bağlam düğümü olarak kullanmanız gerekir.

+0

evet, Mahesh'ın yanıtından anladım, çok aptalım, tüm dosyayı yeniden ayrıştırmayı düşünüyordum. –