2011-08-29 107 views
2
<element> 
    <slot name="slot1"> 
    <port status="active"/> 
    <port status="inactive"/> 
    </slot> 
    <slot name="slot2"> 
    <port status="active"/> 
    </slot> 
</element> 

NodeList listOfElement = doc.getElementsByTagName("port");这给出了xml文件中端口的总数。在特定节点下计算xml节点

我需要找出slot1下有多少个端口。

回答

1

这个怎么样?

var slot1 = doc.getElementsByName("slot1"); 
var slot1_count = slot1[0].getElementsByTagName("port").length; 
+0

NodeList listOfShelfs = doc.getElementsByTagName(“shelfs”); \t \t int slot1_count =((Element)(listOfShelfs.item(0)))。getElementsByTagName(“port”)。getLength(); \t \t System.out.println(slot1_count); thnx ... – Andy

+0

System.out.println?这是Java命令,你是不是指'console.log(slot1_count)'或'document.write(slot1_count)' –

4

的一种方法是使用XPath筛选出结果列表:

XPath xpath = XPathFactory.newInstance().newXPath();    
NodeList list=(NodeList) xpath.evaluate("/element/slot[@name='slot1']/port",doc, XPathConstants.NODESET); 

这将只计算正在插槽与名'slot1'的端口。

+1

你也可以用你的方法,充分利用的XPath计数功能:http://stackoverflow.com/questions/7228182/count-xml-nodes-under-specific-node/7230574#7230574 –

2

你可以用在Java SE的javax.xml.xpath库,并充分利用count功能:

import java.io.FileInputStream; 

import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathFactory; 

import org.xml.sax.InputSource; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     XPath xp = XPathFactory.newInstance().newXPath(); 
     InputSource xml = new InputSource(new FileInputStream("input.xml")); 
     double count = (Double) xp.evaluate("count(//slot[@name='slot1']/port)", xml, XPathConstants.NUMBER); 
    } 

}