Xml XPath命令为子元素和孙元素提供条件
我想在Java中使用XPath从XML文件中获取特定的节点值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
<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个这样的元素具有完全不同的名称,但结构是相同的,所以我正在寻找一种方法来编写一行通用代码,从文件中获取元素名称并自动构造这样的命令。但子节点和孙子节点的数量是可变的