我试图从给定XML文件中的特定元素中找到给定XML元素的相对深度,我尝试使用XPATH,但是我对XML解析不是很熟悉,也没有得到理想的结果.我还需要在计数时忽略数据元素.
下面是我编写的代码和示例XML文件.
例如. TS837_2000A_Loop元素中NM109_BillingProviderIdentifier的深度为4.
父节点是:TS837_2000A_Loop< NM1_SubLoop_2< TS837_2010AA_Loop< NM1_BillingProviderName
因为NM109_BillingProviderIdentifier是NM1_BillingProviderName的子级,因此从TS837_2000A_Loop到NM1_BillingProviderName的相对深度为4(包括TS837_2000A_Loop).
package com.xmlexamples;
import java.io.File;
import java.io.FileInputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
public class XmlParser {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream(new File("D://sample.xml")));
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
String expression;
expression = "count(NM109_BillingProviderIdentifier/preceding-sibling::TS837_2000A_Loop)+1";
Double d = (Double) xpath.compile(expression).evaluate(doc, XPathConstants.NUMBER);
System.out.println("position from TS837_2000A_Loop " + d);
}
}
VNA of Cape Cod
1487651915
8669 NORTHWEST 36TH ST