我有以下xml文件,其中我想使用XPATH选择主机名,实例名称,实例类型
<root>
<hosts>
<host id="11">
<name>ABC</name>
<instances>
<instance id="11-1">
<name>raj</name>
<type>linux</type>
<date>2017</date>
</instance>
<instance id="11-2">
<name>raj1</name>
<type>linux</type>
<date>2017</date>
</instance>
</instances>
</host>
<host id="12">
<name>XYZ</name>
<instances>
<instance id="12-1">
<name>rahul</name>
<type>solaris</type>
<date>2017</date>
</instance>
</instances>
</host>
</hosts>
</root>
我在XPATH下面尝试过选择实例名称和类型但不确定如何打印主机名以及实例名称和类型。
//hosts/host/instances/instance/*[self::name or self:: type]/text()
选择以下结果。
raj
linux
raj1
linux
rahul
solaris
但是,我想要包含主机名的输出如下所示
ABC
raj
linux
raj1
linux
XYZ
rahul
solaris
答案 0 :(得分:2)
以下(使用|
运算符组合由三个查询中的任何一个选择的元素集)将执行以下操作:
//hosts/host[./instances/instance/name or ./instances/instance/type]/name/text()
| //hosts/host/instances/instance/name/text()
| //hosts/host/instances/instance/type/text()
答案 1 :(得分:1)
如果您还要包含hostname
的输出,请尝试以下操作:
//hosts/host//*[self::name or self:: type]/text()
答案 2 :(得分:1)
您可以使用以下任何一种解决方案来实现您想要的结果 -
/ root / hosts / host / name [text()] | / root / hosts / host / instances / instance / * [self :: name or self :: type]
/ root / hosts / host / name [text()] | / root / hosts / host / instances / instance / name [text()] | / root / hosts / host / instances / instance / type [text( )]
// host / name [text()] | // instance / * [self :: name |自::型]
// host / [self :: name] | // instance / [self :: name |自::型]
希望以上是有帮助的。