Java XML解析-递归查找元素
我有一个XML,但我所知道的只是我要查找其值的元素的名称。也就是说,我无法使用XPath轻松检索元素。我必须递归地处理XML,但我似乎失败了。我试过的是: 假设XML具有以下结构:Java XML解析-递归查找元素,java,xml,recursion,Java,Xml,Recursion,我有一个XML,但我所知道的只是我要查找其值的元素的名称。也就是说,我无法使用XPath轻松检索元素。我必须递归地处理XML,但我似乎失败了。我试过的是: 假设XML具有以下结构: <Store id="1"> ... <Customer> <CustomerId>123</CustomerId> </Customer> </Store> ... 123 我想获取CustomerId标记的值。实际上
<Store id="1">
...
<Customer>
<CustomerId>123</CustomerId>
</Customer>
</Store>
...
123
我想获取CustomerId标记的值。实际上,我不知道CustomerId标记在XML中的什么位置。我尝试了以下递归:
private String parseXmlForCustomerId(Element element) {
if (element.getNodeName().equals("CustomerId")) {
return element.getTextContent();
}
NodeList children = element.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node node = children.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE && parseXmlForCustomerId((Element) node).equals("CustomerId")) {
return node.getTextContent();
}
}
return "";
}
私有字符串parseXmlForCustomerId(元素){
if(element.getNodeName().equals(“CustomerId”)){
return元素。getTextContent();
}
NodeList childrends=element.getChildNodes();
for(int i=0;i
我做错了什么
提前谢谢
if (node.getNodeType() == Node.ELEMENT_NODE
&& parseXmlForCustomerId((Element) node).equals("CustomerId")) {
return node.getTextContent();
}
应该是:
if (node.getNodeType() == Node.ELEMENT_NODE) {
String found = parseXmlForCustomerId((Element) node);
if (!found.isEmpty()) {
return found;
}
}
但是XPath是可能的。编写了一个可重用的方法,基于nodeTagName从xmlRecords解析TagValue
public String parseXMLwithNodeTagNames(String xmlRecords, String nodeTagName) {
String tagValue = "";
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = null;
String s = new String(xmlRecords.getBytes(), "ISO-8859-1");
doc = db.parse(new InputSource(new StringReader(s)));
NodeList nl = doc.getElementsByTagName(nodeTagName);
if (nl != null) {
for (int i = 0; i < nl.getLength(); i++) {
Node item = nl.item(i);
String name = item.getNodeName();
tagValue = item.getTextContent();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return tagValue;
}
public String parseXMLwithNodeTagNames(String-xmlRecords,String-nodeTagName){
字符串tagValue=“”;
试一试{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
单据单据=空;
字符串s=新字符串(xmlRecords.getBytes(),“ISO-8859-1”);
doc=db.parse(新的InputSource(新的StringReader));
NodeList nl=doc.getElementsByTagName(nodeTagName);
如果(nl!=null){
对于(int i=0;i
Xpath应该使用
XPathExpression expr = xpath.compile("//CustomerId");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
为什么不能使用xpath
//CustomerId
看起来不错。哦,我不知道!我会努力的!