使用Java的条件xpath
我有一个示例xml文件,如下所示:使用Java的条件xpath,java,xml,xpath,Java,Xml,Xpath,我有一个示例xml文件,如下所示: <Root> <SubOne> <book author="george" /> <indiv name="abc" /> <indiv name="khh" /> <indiv name="ioo" /> </SubOne> <SubTwo> <indiv book
<Root>
<SubOne>
<book author="george" />
<indiv name="abc" />
<indiv name="khh" />
<indiv name="ioo" />
</SubOne>
<SubTwo>
<indiv book author="hamle" />
<indiv name="kok"/>
<indiv name="ppp" />
</SubTow>
</Root>
XPATH中是否有方法检查author=“george”是否选择/Root/SubOne/indiv/@name,或者author=“hamle”是否选择/Root/SubTwo/indiv/@name。
非常感谢您的帮助我想您在node/Root/SubTwo/indiv中有一个输入错误。 这应该行得通(我没有检查)
它使用union,所以这不是您想要的。首先,我注意到您的
XML
无效
假设您的XML如下所示
XML:
对于@author='hamle'
,请使用以下XPATH:
//*[book[@author='george']]/indiv
//*[book[@author='hamle']]/indiv
对于这两种XPATH,要打印名称,请使用@name
爪哇:
使用Java,您需要为xpath和
对于@author='george'
String xpath = "//*[book[@author='george']]/indiv";
NodeList nl = (NodeList) xpath.evaluate(xpath, xml, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getAttributes().getNamedItem("name").getNodeValue());
}
String xpath = "//*[book[@author='hamle']]/indiv";
NodeList nl = (NodeList) xpath.evaluate(xpath, xml, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getAttributes().getNamedItem("name").getNodeValue());
}
看看这个问题@codewagge,我看到了帖子。我想要的是,在java程序中实现这个条件。如果你在问题中包含这些信息,你可能会得到更多帮助。java不是我的领域,希望新的标签和标题能吸引java开发者的眼球。用谷歌搜索一个how-to比在上面要求一段特定的代码要好得多。人们会帮你找到解决方案,但他们不会提供编码服务。如果你检查这个,请告诉我。除了模拟true'if'子句外,您只能使用结果中的第一个属性。@victor,实际上我正试图用java实现它。我尝试了,它抛出了一个错误,“与元素类型“indiv”关联的属性名“book”后面必须跟“=”字符。”首先修复输入错误:“”它的XML语法不正确。我已修复了输入错误。我如何在java中实现它?非常感谢!那有帮助!
String xpath = "//*[book[@author='george']]/indiv";
NodeList nl = (NodeList) xpath.evaluate(xpath, xml, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getAttributes().getNamedItem("name").getNodeValue());
}
String xpath = "//*[book[@author='hamle']]/indiv";
NodeList nl = (NodeList) xpath.evaluate(xpath, xml, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getAttributes().getNamedItem("name").getNodeValue());
}