2013-05-22 58 views
0

我有一個關於如何通過按屬性過濾外部元素來對其他元素中的元素進行計數的問題。我有下面的XML文檔:如何統計具有外部元素限制的內部XML元素

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> 
<DSCT2C> 
    <TESTSTEPS APPLICATION="UGS"> 

     <TESTSTEP ORDER_NUMBER="0"> 
      <EN>Common Test</EN> 
      <DE>Allgemeiner Test</DE> 

      <TEST NEED_FUNCTION="true" FUNCTION_NAME="functionName"> 
       <DESCRIPTION> 
        <DE>Hallo</DE> 
        <EN>Hello</EN> 
       </DESCRIPTION> 
       <FILES> 
        <FILE>test.prt</FILE> 
        <FILE>test.drw</FILE> 
       </FILES> 
      </TEST> 
      <TEST NEED_FUNCTION="false"> 
       <DESCRIPTION> 
        <DE>Hallo2</DE> 
        <EN>Hello2</EN> 
       </DESCRIPTION> 
       <FILES> 
       </FILES> 
      </TEST> 
     </TESTSTEP> 

     <TESTSTEP ORDER_NUMBER="1"> 
      <EN>Just a test</EN> 
      <DE>Nur ein Test</DE> 

      <TEST NEED_FUNCTION="true" FUNCTION_NAME="functionName123"> 
       <DESCRIPTION> 
        <DE>Hallo</DE> 
        <EN>Hello</EN> 
       </DESCRIPTION> 
       <FILES> 
        <FILE>test.prt</FILE> 
        <FILE>test.drw</FILE> 
       </FILES> 
      </TEST> 
      <TEST NEED_FUNCTION="true" FUNCTION_NAME="functionName456"> 
       <DESCRIPTION> 
        <DE>Hallo2</DE> 
        <EN>Hello2</EN> 
       </DESCRIPTION> 
       <FILES> 
       </FILES> 
      </TEST> 
     </TESTSTEP> 

    </TESTSTEPS> 
</DSCT2C> 

我想指望從TESTSTEP元素中的所有元素TEST與例如ORDER_NUMBER=0。我如何用DOM做到這一點?

回答

0

試試這個

int n = 0; 
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("1.xml")); 
    NodeList list = doc.getElementsByTagName("TESTSTEP"); 
    for (int i = 0; i < list.getLength(); i++) { 
     Element e = (Element) list.item(i); 
     if (e.getAttribute("ORDER_NUMBER").equals("0")) { 
      n += e.getElementsByTagName("TEST").getLength(); 
     } 
    } 
+0

謝謝你解決了我的問題。 –

0

使用XPath表達式:

"//TESTSTEP[@ORDER_NUMBER = '0']/TEST" 

然後得到所返回的NodeList的長度。

的代碼看起來是這樣的:

XPath xpath = XPathFactory.newInstance().newXPath() 
NodeList tests = (NodeList)xpath.evaluate("//TESTSTEP[@ORDER_NUMBER = '0']/TEST", document, XPathConstants.NODESET); 

int testCount = tests.getLength(); 
+0

是什麼元素(節點列表)xpath.evaluate(「//一步步測試[@ORDER_NUMBER = '0']/TEST「,元素,XPathConstants.NODESET);? –

+0

對不起,這是一個錯字 - 你應該只是通過文件。 –