Xml XPath命令为子元素和孙元素提供条件

Xml XPath命令为子元素和孙元素提供条件,xml,xpath,xml-parsing,xpath-2.0,domxpath,Xml,Xpath,Xml Parsing,Xpath 2.0,Domxpath,我想在Java中使用XPath从XML文件中获取特定的节点值 <country> <countryName>India</countryName> <city> <name>Mumbai</name> <hotel> <hotelName>Marriott</hotelName> <cap

我想在Java中使用XPath从XML文件中获取特定的节点值

<country>
    <countryName>India</countryName>
    <city>
        <name>Mumbai</name>
        <hotel>
            <hotelName>Marriott</hotelName>
            <capacity>500</capacity>
        </hotel>
        <hotel>
            <hotelName>ITC</hotelName>
            <capacity>400</capacity>
        </hotel>
    </city>
    <city>
        <name>Bangalore</name>
        <hotel>
            <hotelName> ITC</hotelName>
            <capacity>250</capacity>
        </hotel>
    </city>
</country>
<country>
    <countryName>Australia</countryName>
    <city>
        <name>Sydney</name>
        <hotel>
            <hotelName>Marriott</hotelName>
            <capacity>200</capacity>
        </hotel>
    </city>
</country>

印度
孟买
万豪
500
国贸中心
400
班加罗尔
国贸中心
250
澳大利亚
悉尼
万豪
200
现在,我希望使用xpath命令从特定国家/地区获得酒店的容量。 情况是这样的- 在**国家=印度,城市=孟买,酒店=万豪酒店**

可能会有更多的国家和城市拥有相同的酒店名称

我所做的是

//国家[标准化空间(名称)=“印度”,标准化空间(城市/名称)=“孟买”,标准化空间(城市/酒店)=“万豪”]/city/capacity/text()

但这给了我一个印度国内所有酒店容量的输出

请帮助执行命令,我不知道我哪里出了问题,或者我应该更改什么

在您的方法中,谓词(方括号中的条件)是基于子节点/孙子节点的存在选择一个国家,然后选择该国境内的所有城市/容量。如果您始终打算以单个特定酒店为目标,则将谓词与层次结构的每个级别相关联,例如:

//country[normalize-space(countryName)="India"]/city[normalize-space(name)="Mumbai"]/hotel[normalize-space(hotelName)="Marriott"]/capacity/text()

返回500。这将为名为“印度”的国家中名为“孟买”的城市中名为“万豪”的酒店选择容量文本。

请注意,示例输入/xpath中有两个输入错误。有一个不正确关闭的hotel节点,示例xpath引用了一个国家的“名称”节点,而不是“国家名称”。谢谢,我现在已经更正了它,因为我使用它的xml,我不能像这样硬编码它,因为xml不会是相同的,但结构会相似!如何在相同条件下编写命令,但条件不太具体(不是硬编码)?这与您提出的问题完全不同。您尚未共享有关如何构造XPath的任何信息。XPath本身没有变量,因此需要使用XQuery或任何脚本/编程语言来动态构造XPath。我回答了您直接提出的问题(为什么显式XPath没有返回预期结果)。是的,您回答了我的问题,切中要害!除了这个问题,我在评论中还问了你这个问题,因为我看到你在这方面比我有很多知识。我将检查XQuery或其他动态构造xpath的方法。我不能硬编码,因为我从实时服务器接收xml文件,并且不是每次都能反映所有元素的更改。这个xml是一个例子,不是真实的。实际上,大约有100个这样的元素具有完全不同的名称,但结构是相同的,所以我正在寻找一种方法来编写一行通用代码,从文件中获取元素名称并自动构造这样的命令。但子节点和孙子节点的数量是可变的