使用Java的条件xpath

使用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

我有一个示例xml文件,如下所示:

<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()); 
}