【问题标题】:How do we write a condition in XSLT for the XML node that has multiple nodes within it?我们如何在 XSLT 中为其中包含多个节点的 XML 节点编写条件?
【发布时间】:2020-07-23 20:11:37
【问题描述】:

以下是示例 XML:

<?xml version='1.0' encoding='UTF-8'?>
<wd:Report_Data xmlns:wd="urn:com.workday.report/Data_Split_File">
    <wd:Report_Entry>
        <wd:Flag>H</wd:Flag>
        <wd:Userid>123456</wd:Userid>
        <wd:FirstName>Alex</wd:FirstName>
        <wd:LastName>Ruther</wd:LastName>
        <wd:businessTitle>Tech Analyst</wd:businessTitle>
        <wd:WorkerType wd:Descriptor=" Support_Worker ">
            <wd:ID wd:type="WID">e258987456fc25845bbaf243f62fb910</wd:ID>
            <wd:ID wd:type="Employee_Type_ID">Support_Worker</wd:ID>
        </wd:WorkerType>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:Flag>T</wd:Flag>
        <wd:Userid>7891011</wd:Userid>
        <wd:FirstName>Wafer</wd:FirstName>
        <wd:MiddleName>Glader</wd:MiddleName>
        <wd:LastName>Tiles</wd:LastName>
        <wd:businessTitle>Tech Advisor</wd:businessTitle>
        <wd:WorkerType wd:Descriptor=" Daily_Worker ">
            <wd:ID wd:type="WID">e369852147fc564897bbaf243f62fb910</wd:ID>
            <wd:ID wd:type="Employee_Type_ID">Daily_Worker</wd:ID>
        </wd:WorkerType>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:Flag>O</wd:Flag>
        <wd:Userid>1213141</wd:Userid>
        <wd:FirstName>Federal</wd:FirstName>
        <wd:MiddleName>Mark</wd:MiddleName>
        <wd:LastName>Coupon</wd:LastName>
        <wd:businessTitle>Tech Analyst</wd:businessTitle>
        <wd:WorkerType wd:Descriptor=" Hourly_Worker ">
            <wd:ID wd:type="WID">e55898456fc25896bbaf243f62fb910</wd:ID>
            <wd:ID wd:type="Employee_Type_ID">Hourly_Worker</wd:ID>
        </wd:WorkerType>
    </wd:Report_Entry>
</wd:Report_Data>

我正在尝试编写如下条件,使用标志“O”和工作类型过滤 XML “Daily_Worker”和“Hourly_Worker”,但在过滤工人类型时发现问题。

<xsl:if test="wd:Flag ='O' or wd:WorkerType/wd:ID/wd:type=Employee_Type_ID" != ' Support_Worker '">

我们如何过滤具有多个节点的工作类型?

【问题讨论】:

  • 我修复了您的源 XML 以使其格式良好。如果您的真实 XML 与此不同,则必须更改您的 XML。

标签: xslt-1.0 xslt-2.0 xslt-3.0


【解决方案1】:

您可以使用以下 XPath 表达式:

wd:Flag='O' and (wd:WorkerType/wd:ID/@wd:type='Employee_Type_ID' or wd:WorkerType/@wd:Descriptor != ' Support_Worker ')

它选择所有wd:Flag 为“O”且wd:WorkerType/wd:ID/@wd:type 为“Employee_Type_ID”或wd:WorkerType/@wd:Descriptor 不是“Support_Worker”的元素。

因此,将上下文节点 /wd:Report_Data/wd:Report_Entry 应用于上述示例,结果将是

false
false
true

【讨论】:

  • 某些提供的 Xpath 表达式如何不起作用。因此,我更改了该节点的 xml 格式并相应地在 XSLT 中进行了更改。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 2013-03-26
  • 2015-08-04
相关资源
最近更新 更多