我正在努力阅读xml文件并执行一些功能。我想知道的是如何获得父元素下的元素数量。假设我有一个xml文件,如下所示:
<TestCase>
<SelectedDataTableNames name="SearchData"> </SelectedDataTableNames>
<Open page="hsbc" ms="5000" />
<Click object="hsbc.Personal_Link" />
<Click object="hsbc.CreditCard_tab" />
<Call businessComponent="Global.Verify_Search">
<Param name="HotelName_Param" value="@SearchData_link" />
</Call>
<CheckElementPresent object="hsbc.Img_Hotel_logo" Identifire="Hotel_Name_PARAM:@SearchData_ResultHotelName" fail="true" customErrorMessage="Searched hotel name is not present in the page." />
</TestCase>
这里是如何编码以获得&#34;&#34;下的元素数量,这将是6。
NodeList nList = doc.getElementsByTagName("Click");
System.out.println(nList.getLength());
上面不会给出结果,因为它只会为指定的元素进行处理。 any1可以帮我解决这个问题。关于该主题的任何链接也将有所帮助。我遇到了以下代码,我不明白它是如何工作的。因此,如果以下代码对于此问题是正确的,请帮助我理解。
int childrenCount = doc.getChildNodes().item(0).getChildNodes().getLength();
答案 0 :(得分:1)
如果您的xml始终采用指定格式,请为其创建xsd并生成jaxb类。然后只需使用jaxb读取文件。然后,您将能够使用getter遍历文件,并只计算您感兴趣的元素数量
答案 1 :(得分:1)
doc.getElementsByTagName("Click");
上面的代码将搜索标签名为“Click”的所有元素,在您的情况下,结果将为2。 所以,如果我理解你的问题,你想拥有直系孩子的数量,那么你可以这样做:
doc.getElementsByTagName("TestCase").item(0).getChildNodes().getLenth()
答案 2 :(得分:1)
通过此NodeList l = doc.getElementsByTagName("xxx"); // Could be 'TestCAse'
如果你知道只有一个名为TestCAse的节点,那就
Node parentNode = l.item(0);
通过执行此操作,您可以访问父节点。
现在通过这样做检查孩子的数量
int count = parentNode.getChildNodes().getLength();
<强>更新:: 强>
发生这种情况是因为DOM解析器将xml文件中的空格甚至Enter视为一个节点,因此也被视为一个节点,这就是为什么要获得这么多节点而不仅仅是3或4 < /强>
请将此方法添加到您的程序中。我之前遇到过类似的问题。清除白色空间然后做你正在做的事情。我相信它会起作用
将您的最顶层或所需的父节点传递给此方法,然后执行您正在执行的操作
private void removeWhitespaceNodes(Node e)
{
NodeList children = e.getChildNodes();
for (int i = children.getLength() - 1; i >= 0; i--)
{
Node child = children.item(i);
if (child instanceof Text && ((Text) child).getData().trim().length() == 0) {
e.removeChild(child);
}
else if (child instanceof Element)
{
removeWhitespaceNodes(child);
}
}
}
答案 3 :(得分:0)
找到问题的答案。有用。我遇到的问题是ELEMENT_NODE。我们必须过滤ELEMENT_NODE。这是工作代码。感谢所有帮助过那里的人。
File fXmlFile = new File("SearchPromotions.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
Element docEle = doc.getDocumentElement();
NodeList nl = docEle.getChildNodes();
if (nl != null && nl.getLength() > 0) {
for (int i = 0; i < nl.getLength(); i++) {
if (nl.item(i).getNodeType() == Node.ELEMENT_NODE) {
Element el = (Element) nl.item(i);
System.out.println(el);
}
}
}