根据 Xpath 表达式过滤记录

Filtering records based on Xpath expression

我正在尝试根据 2 位国家/地区代码 (ISO_3166-1_Alpha-2_Code) 过滤工作人员记录。我想过滤在国家 India(IN) 工作的工人的记录。

下面是XML源代码:

<wd:Get_Workers_Response xmlns:wd="urn:com.workday/bsvc" wd:version="v32.0">
    <wd:Worker>
        <wd:Employment_Data>
            <wd:Home_Country_Reference>
                <wd:ID wd:type="ISO_3166-1_Alpha-2_Code">AR</wd:ID>
                <wd:ID wd:type="ISO_3166-1_Alpha-3_Code">ARG</wd:ID>
            </wd:Home_Country_Reference>
        </wd:Employment_Data>
        <wd:Personal_Data>
            <wd:Name_Data>
                <wd:First_Name>Rohit</wd:First_Name>
                <wd:Last_Name>Singh</wd:Last_Name>
            </wd:Name_Data>
        </wd:Personal_Data>
    </wd:Worker>
    <wd:Worker>
        <wd:Employment_Data>
            <wd:Home_Country_Reference>
                <wd:ID wd:type="ISO_3166-1_Alpha-2_Code">IN</wd:ID>
                <wd:ID wd:type="ISO_3166-1_Alpha-3_Code">IND</wd:ID>
            </wd:Home_Country_Reference>
        </wd:Employment_Data>
        <wd:Personal_Data>
            <wd:Name_Data>
                <wd:First_Name>Shivam</wd:First_Name>
                <wd:Last_Name>Dubey</wd:Last_Name>
            </wd:Name_Data>
        </wd:Personal_Data>
    </wd:Worker>
</wd:Get_Workers_Response>

我使用了下面的 Xpath 表达式:

//wd:Employment_Data[wd:Home_Country_Reference/wd:ID = 'IN']

这给了我以下输出:

Element='<wd:Employment_Data xmlns:wd="urn:com.workday/bsvc">
            <wd:Home_Country_Reference>
                  <wd:ID wd:type="ISO_3166-1_Alpha-2_Code">IN</wd:ID>
                  <wd:ID wd:type="ISO_3166-1_Alpha-3_Code">IND</wd:ID>
            </wd:Home_Country_Reference>
        </wd:Employment_Data>'

此 Xpath 表达式的输出不包含 Personal_Data 节点。是否可以使用 Xpath 表达式根据 'IN' 国家/地区过滤数据并在输出中包含两个节点(Employment_Data 和 Personal_Data)?或者我们是否必须使用 XSLT 进行此转换?

预期输出:

<wd:Get_Workers_Response xmlns:wd="urn:com.workday/bsvc" wd:version="v32.0">
    <wd:Employment_Data>
        <wd:Home_Country_Reference>
            <wd:ID wd:type="ISO_3166-1_Alpha-2_Code">IN</wd:ID>
            <wd:ID wd:type="ISO_3166-1_Alpha-3_Code">IND</wd:ID>
        </wd:Home_Country_Reference>
    </wd:Employment_Data>
    <wd:Personal_Data>
        <wd:Name_Data>
            <wd:First_Name>Shivam</wd:First_Name>
            <wd:Last_Name>Dubey</wd:Last_Name>
        </wd:Name_Data>
    </wd:Personal_Data>
</wd:Worker>
</wd:Get_Workers_Response>

您只选择了 EmploymentData 节点。请尝试以下操作:

//wd:Worker[wd:Employment_Data/wd:Home_Country_Reference/wd:ID = 'IN']