需要帮助以找到正确的XSLT代码的Xpath

时间:2018-11-15 01:17:34

标签: xml xslt xpath

我下面有一个XML,并且对于以下情况需要正确的xpath:

Look for Phone_Device_Type_ID = Cell # 1
Look for Communication_Usage_Type_ID = WORK 
Display Formatted_Phone

我的xpath:

wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data[
  wd:Phone_Device_Type_Reference/wd:ID='Cell # 1'
]/wd:Usage_Data[wd:Type_Data/wd:Type_Reference/wd:ID='WORK']/@wd:Formatted_Phone

示例XML

<wd:Phone_Data wd:Formatted_Phone="+1 (847) 8675309">
    <wd:Country_ISO_Code>USA</wd:Country_ISO_Code>
    <wd:International_Phone_Code>1</wd:International_Phone_Code>
    <wd:Area_Code>847</wd:Area_Code>
    <wd:Phone_Number>8675309</wd:Phone_Number>
    <wd:Phone_Device_Type_Reference>
        <wd:ID wd:type="WID">1cfe702a6234015468e3527fd07c1001</wd:ID>
        <wd:ID wd:type="Phone_Device_Type_ID">Cell # 1</wd:ID>
    </wd:Phone_Device_Type_Reference>
    <wd:Usage_Data wd:Public="1">
        <wd:Type_Data wd:Primary="0">
            <wd:Type_Reference>
                <wd:ID wd:type="WID">1f27f250dfaa4724ab1e1617174281e4</wd:ID>
                <wd:ID wd:type="Communication_Usage_Type_ID">WORK</wd:ID>
            </wd:Type_Reference>
        </wd:Type_Data>
    </wd:Usage_Data>
</wd:Phone_Data>
<wd:Phone_Data wd:Formatted_Phone="+1 (847) 8675309">
    <wd:Country_ISO_Code>USA</wd:Country_ISO_Code>
    <wd:International_Phone_Code>1</wd:International_Phone_Code>
    <wd:Area_Code>847</wd:Area_Code>
    <wd:Phone_Number>8675309</wd:Phone_Number>
    <wd:Phone_Device_Type_Reference>
        <wd:ID wd:type="WID">1cfe702a6234015468e3527fd07c1001</wd:ID>
        <wd:ID wd:type="Phone_Device_Type_ID">Cell # 1</wd:ID>
    </wd:Phone_Device_Type_Reference>
    <wd:Usage_Data wd:Public="1">
        <wd:Type_Data wd:Primary="0">
            <wd:Type_Reference>
                <wd:ID wd:type="WID">1f27f250dfaa4724ab1e1617174281e4</wd:ID>
                <wd:ID wd:type="Communication_Usage_Type_ID">HOME</wd:ID>
            </wd:Type_Reference>
        </wd:Type_Data>
    </wd:Usage_Data>
</wd:Phone_Data>

1 个答案:

答案 0 :(得分:0)

您已经接近了,但是XPath的编写方式希望将@wd:Formatted_Phone属性附加到wd:Usage_Data元素上。您想在wd:Phone_Data元素上选择该元素,并将wd:Usage_data移到wd:Phone_Data元素的谓词过滤器内。

以下内容选择具有满足您条件的元素的@wd:Formatted_Phone元素的wd:Phone_Data值(带有附加谓词,以指定的wd:ID值为目标@wd:type元素。

wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/
  wd:Phone_Data[
    wd:Phone_Device_Type_Reference/wd:ID[@wd:type='Phone_Device_Type_ID']='Cell # 1' and 
    wd:Usage_Data/wd:Type_Data/wd:Type_Reference/wd:ID[@wd:type='Communication_Usage_Type_ID']='WORK'
  ]/@wd:Formatted_Phone