Нужна помощь, чтобы найти правильный Xpath для кода XSLT - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть 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 голосов
/ 15 ноября 2018

Вы были близки, но, как это было написано, ваш 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...