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

时间:2012-11-12 04:00:50

标签: xml xslt xpath parent-child siblings

目前我有一些像这样的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,任何想法都会受到赞赏。谢谢大家。

2 个答案:

答案 0 :(得分:3)

使用:

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

答案 1 :(得分:3)

使用

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

这将选择text的任何子元素的任何/*/restriction属性,其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