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