Java 使用Xpath检查Xml文件中是否存在特定节点
我想检查我的xml文件中是否存在使用xPath的Java 使用Xpath检查Xml文件中是否存在特定节点,java,xml,xpath,Java,Xml,Xpath,我想检查我的xml文件中是否存在使用xPath的code=“ABC”。您能为我推荐一些方法吗 <metadata> <codes class = "class1"> <code code = "ABC"> <detail "blah blah"/> </code> </codes> <codes class = "class2"> <
code=“ABC”
。您能为我推荐一些方法吗
<metadata>
<codes class = "class1">
<code code = "ABC">
<detail "blah blah"/>
</code>
</codes>
<codes class = "class2">
<code code = "123">
<detail "blah blah"/>
</code>
</codes>
</metadata>
[编辑]
我没有跟随。它将变为空
XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xPath.compile("//codes/code[@ code ='ABC']");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println("nodes: "+ nodes.item(i).getNodeValue());
}
XPath=XPathFactory.newInstance().newXPath();
XPathExpression expr=xPath.compile(“//code/code[@code='ABC']”);
Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
对于(int i=0;i
我不知道您是如何测试代码的,因为
是一个不正确的xml构造,它应该是
即名称-值对
对于XPath表达式“//code/code[@code='ABC']”
节点。项(i).getNodeValue())将为null,因为它将返回一个元素。请参阅下面的Javadoc注释:
工作示例:
import java.io.ByteArrayInputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class Test
{
public static void main(String[] args) throws Exception
{
Document doc = getDoc();
XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xPath.compile("//codes/code[@code ='ABC']");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
System.out.println("Have I found anything? " + (nodes.getLength() > 0 ? "Yes": "No"));
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println("nodes: "+ nodes.item(i).getNodeValue());
}
}
private static Document getDoc()
{
String xml = "<metadata>"+
"<codes class = 'class1'>"+
"<code code='ABC'>"+
"<detail x='blah blah'/>"+
"</code>"+
"</codes>"+
"<codes class = 'class2'>"+
"<code code = '123'>"+
"<detail x='blah blah'/>"+
"</code>"+
"</codes>"+
"</metadata>";
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse(new ByteArrayInputStream(xml.getBytes()));
return dom;
}catch(Exception pce) {
pce.printStackTrace();
}
return null;
}
}
import java.io.ByteArrayInputStream;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.xpath.xpath;
导入javax.xml.xpath.XPathConstants;
导入javax.xml.xpath.XPathExpression;
导入javax.xml.xpath.XPathFactory;
导入org.w3c.dom.Document;
导入org.w3c.dom.NodeList;
公开课考试
{
公共静态void main(字符串[]args)引发异常
{
Document doc=getDoc();
XPath=XPathFactory.newInstance().newXPath();
XPathExpression expr=xPath.compile(“//code/code[@code='ABC']”);
Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
System.out.println(“我找到什么了吗?”+(nodes.getLength()>0?“是”:“否”);
对于(int i=0;i”+
""+
“
”+
""+
""+
“”+
""+
“
”+
""+
"";
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
试一试{
DocumentBuilder db=dbf.newDocumentBuilder();
Document dom=db.parse(新的ByteArrayInputStream(xml.getBytes());
返回dom;
}捕获(pce例外){
pce.printStackTrace();
}
返回null;
}
}
您尝试过什么?你找了什么?您的障碍具体在哪里?这不是有效的xml,
缺少属性名您的匹配模式“@code=”中确实有空格吗?如果有,请删除这些多余的空格。此外,元素的“nodeValue”是“null”,因此您的代码实际上可能正在工作。你应该打印出更有意义的东西。