Xpath 从兄弟节点的父节点获取值

Posted

技术标签:

【中文标题】Xpath 从兄弟节点的父节点获取值【英文标题】:Xpath get value from parent node of siblings 【发布时间】:2012-11-12 04:00:49 【问题描述】:

目前我有一些这样的 xml 结构:

<element type="Input" name="nationality">
   <property i18n="true" text="Nationality" prefix="person.nationality."
    name="caption">caption</property>
   <property i18n="true" text="Nationality" prefix="person.nationality."
    name="desc">desc</property>
   <property name="visible">1</property>
   <property name="mandatory">0</property>
   <property name="value">AUS</property>
   <restriction prefix="country." base="String">
    <enumeration text="Albania" value="ALB" />
    <enumeration text="Algeria" value="DZA" />
    <enumeration text="Argentina" value="ARG" />
    <enumeration text="Australia" value="AUS" />
    <enumeration text="Austria" value="AUT" />
    <enumeration text="Bahrain" value="BHR" />
   </restriction>
</element>

我想问有没有什么方法可以使用 xpath 来提取枚举[@text] 标记的值,其值等于属性中的文本 [@name='value']。在这种情况下,期望文本“澳大利亚”。

这只是我第一次使用 xpath,任何想法将不胜感激。谢谢大家。

【问题讨论】:

【参考方案1】:

用途:

/*/*/enumeration[@value = ../../*[@name = 'value']]/@text

【讨论】:

【参考方案2】:

使用

/*/restriction/*[@value = /*/property[@name='value']]/@text

这将选择/*/restriction 的任何子元素的任何text 属性,其value 属性等于顶部元素的property 子元素的字符串值,即(property 子元素)具有一个name属性,其字符串值为"value"

如果您不想选择属性,而只想选择其字符串值,请使用:

string(/*/restriction/*[@value = /*/property[@name='value']]/@text)

基于 XSLT 的验证

 <xsl:template match="/">
  <xsl:value-of select=
  "/*/restriction/*[@value = /*/property[@name='value']]/@text"/>
==========
  <xsl:value-of select=
  "string(/*/restriction/*[@value = /*/property[@name='value']]/@text)"/>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<element type="Input" name="nationality">
   <property i18n="true" text="Nationality" prefix="person.nationality."
    name="caption">caption</property>
   <property i18n="true" text="Nationality" prefix="person.nationality."
    name="desc">desc</property>
   <property name="visible">1</property>
   <property name="mandatory">0</property>
   <property name="value">AUS</property>
   <restriction prefix="country." base="String">
    <enumeration text="Albania" value="ALB" />
    <enumeration text="Algeria" value="DZA" />
    <enumeration text="Argentina" value="ARG" />
    <enumeration text="Australia" value="AUS" />
    <enumeration text="Austria" value="AUT" />
    <enumeration text="Bahrain" value="BHR" />
   </restriction>
</element>

根据上述文档评估两个 xpath 表达式,并将这些评估结果的字符串值(正确分隔)复制到输出

Australia
==========
  Australia

【讨论】:

以上是关于Xpath 从兄弟节点的父节点获取值的主要内容,如果未能解决你的问题,请参考以下文章

(CSS / jQuery/ XPath) 用于从姐妹/兄弟节点 (DOM) 获取内部文本的选择器

如果它是使用 XPath 在 Scrapy 中的其他节点的父节点,如何从子节点获取文本

XPath:如何获取两个兄弟节点的连接文本?

js,jq获取父,兄弟,子节点整理

XPath:从子节点获取父节点

xpath获取同级节点