XSLT-如何获得重复标签中的第一个值-如此简单,但并非如此简单

问题描述 投票:0回答:1

我有一个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

[遗憾的是,没有键或任何其他字段可区分两个手机号码条目。您对此有任何建议或解决方案吗?任何指针表示赞赏。

xslt xslt-2.0 xslt-grouping
1个回答
0
投票

您的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>
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.