我有一个XML,可以在其中获取各种电话类型及其值。对于相同的电话类型,XML具有多个值(例如,一个可以具有两个移动电话号码)。无论有多少个数字,我都必须使用XSLT获得第一个值。这是一个非常简单的问题,但我对此不敢理head。这是示例XML,我希望手机号码全为2-
<Work_Phone>
<Work_Phones_group>
<WorkphoneType wd:Descriptor="Fax">
<ID wd:type="Device">Fax</wd:ID>
</WorkphoneType>
<WorkphoneNumber>111-111-1111</wd:WorkphoneNumber>
</Work_Phones_group>
<Work_Phones_group>
<WorkphoneType wd:Descriptor="Mobile">
<ID wd:type="Device">Mobile</wd:ID>
</WorkphoneType>
<WorkphoneNumber>222-222-2222</wd:WorkphoneNumber>
</Work_Phones_group>
<Work_Phones_group>
<WorkphoneType wd:Descriptor="Mobile">
<ID wd:type="Device">Mobile</wd:ID>
</WorkphoneType>
<WorkphoneNumber>333-333-3333</wd:WorkphoneNumber>
</Work_Phones_group>
</Work_Phone>
需要的输出值-222-222-2222
[遗憾的是,没有键或任何其他字段可区分两个手机号码条目。您对此有任何建议或解决方案吗?任何指针表示赞赏。
您的XML不是格式正确。我更改了一些名称空间前缀,使其变为格式正确,从而消除了一些不一致之处:
<Work_Phone xmlns:wd="http://some.wd.ns">
<Work_Phones_group>
<WorkphoneType wd:Descriptor="Fax">
<wd:ID wd:type="Device">Fax</wd:ID>
</WorkphoneType>
<wd:WorkphoneNumber>111-111-1111</wd:WorkphoneNumber>
</Work_Phones_group>
<Work_Phones_group>
<WorkphoneType wd:Descriptor="Mobile">
<wd:ID wd:type="Device">Mobile</wd:ID>
</WorkphoneType>
<wd:WorkphoneNumber>222-222-2222</wd:WorkphoneNumber>
</Work_Phones_group>
<Work_Phones_group>
<WorkphoneType wd:Descriptor="Mobile">
<wd:ID wd:type="Device">Mobile</wd:ID>
</WorkphoneType>
<wd:WorkphoneNumber>333-333-3333</wd:WorkphoneNumber>
</Work_Phones_group>
</Work_Phone>
现在,要获得所需的222-222-2222
值,请使用此XPath-1.0表达式
/Work_Phone/Work_Phones_group[WorkphoneType/@wd:Descriptor='Mobile'][1]/wd:WorkphoneNumber
或定制此模板以获取您真正想要的值
<xsl:template match="/">
<xsl:for-each select="Work_Phone/Work_Phones_group[WorkphoneType/@wd:Descriptor='Mobile'][1]">
<xsl:value-of select="wd:WorkphoneNumber" />
</xsl:for-each>
</xsl:template>