2013-05-22 3 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> 

Я хочу, чтобы сосчитать все TEST элементы из TESTSTEP элемента с, например 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

Что элемент (NodeList) xpath.evaluate ("// TESTSTEP [@ORDER_NUMBER = '0']/TEST ", элемент, XPathConstants.NODESET) ;? –

+0

К сожалению, это была опечатка - вы должны просто передать документ. –

Смежные вопросы