【问题标题】:How to display a node value only when it exists in another node仅当节点值存在于另一个节点中时如何显示节点值
【发布时间】:2022-06-22 02:44:41
【问题描述】:

我有 2 个独立数据源的组合 xml - 资格和报告数据。报告数据 xml 部分具有工作资料和认证参考 ID。资格 xml 部分具有与其关联的工作资料和多个认证参考 ID。我正在尝试生成一个最终输出 xml,仅当资格 XML 部分中存在匹配的工作配置文件和认证参考 ID 时,它才应显示报告数据 xml 部分中的工作配置文件 ID 和认证参考 ID。我尝试使用 xslt 3.0 accumulator - map 功能,但由于我的知识非常基础,所以无法使用它。

以下是输入文件和预期输出文件的详细信息。非常感谢有关此问题的任何帮助。

输入文件->

<?xml version="1.0" encoding="utf-8"?>
<root>
    <Qualifications>
        <wd:Qualification_Equivalence_Rule xmlns:wd="urn:com.workday/bsvc"
            xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
            <wd:Qualification_Equivalence_Rule_Reference>
                <wd:ID wd:type="WID">f67d472cae950122e67fdf1a04066965</wd:ID>
                <wd:ID wd:type="Qualification_Equivalence_Rule">QUALIFICATION_EQUIVALENCE_RULE-6-357</wd:ID>
            </wd:Qualification_Equivalence_Rule_Reference>
            <wd:Qualification_Equivalence_Rule_Data>
                <wd:ID>QUALIFICATION_EQUIVALENCE_RULE-6-357</wd:ID>
                <wd:Qualification_Equivalence_Rule_Inactive>0</wd:Qualification_Equivalence_Rule_Inactive>
                <wd:Job_Profile_Reference>
                    <wd:ID wd:type="WID">1117412e1680011e3e797b4c4103a890</wd:ID>
                    <wd:ID wd:type="Job_Profile_ID">47063</wd:ID>
                </wd:Job_Profile_Reference>
                <wd:Condition_Rule_Data>
                    <wd:Condition_Rule_ID>CONDITION_RULE-6-1043</wd:Condition_Rule_ID>
                    <wd:Rule_Description>47063</wd:Rule_Description>
                    <wd:Condition_Item_Data>
                        <wd:Order>a</wd:Order>
                        <wd:And_Or_Operator_Reference>
                            <wd:ID wd:type="WID">da4e1c34446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="And_Or_Operator_Name">And</wd:ID>
                        </wd:And_Or_Operator_Reference>
                        <wd:Relational_Operator_Reference>
                            <wd:ID wd:type="WID">d5227566446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="Relational_Operator_Name">any in the selection list</wd:ID>
                        </wd:Relational_Operator_Reference>
                        <wd:Condition_Entry_Option_Reference>
                            <wd:ID wd:type="WID">da59516c446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="Condition_Entry_Option_Name">Value specified in this filter</wd:ID>
                        </wd:Condition_Entry_Option_Reference>
                        <wd:Source_External_Field_Reference>
                            <wd:ID wd:type="WID">2da3447d0426100005f7c3e752840110</wd:ID>
                        </wd:Source_External_Field_Reference>
                        <wd:Target_Instance_Reference>
                            <wd:ID wd:type="WID">f67d472cae9501225db826ec7a057066</wd:ID>
                            <wd:ID wd:type="Certification_ID">SLP</wd:ID>
                        </wd:Target_Instance_Reference>
                    </wd:Condition_Item_Data>
                    <wd:Condition_Item_Data>
                        <wd:Order>b</wd:Order>
                        <wd:And_Or_Operator_Reference>
                            <wd:ID wd:type="WID">da4e1c34446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="And_Or_Operator_Name">And</wd:ID>
                        </wd:And_Or_Operator_Reference>
                        <wd:Relational_Operator_Reference>
                            <wd:ID wd:type="WID">d5227566446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="Relational_Operator_Name">any in the selection list</wd:ID>
                        </wd:Relational_Operator_Reference>
                        <wd:Condition_Entry_Option_Reference>
                            <wd:ID wd:type="WID">da59516c446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="Condition_Entry_Option_Name">Value specified in this filter</wd:ID>
                        </wd:Condition_Entry_Option_Reference>
                        <wd:Source_External_Field_Reference>
                            <wd:ID wd:type="WID">2da3447d0426100005f7c3e752840110</wd:ID>
                        </wd:Source_External_Field_Reference>
                        <wd:Target_Instance_Reference>
                            <wd:ID wd:type="WID">f67d472cae95015969f6ffeb7a05f465</wd:ID>
                            <wd:ID wd:type="Certification_ID">CCC-SLP</wd:ID>
                        </wd:Target_Instance_Reference>
                    </wd:Condition_Item_Data>                   
                </wd:Condition_Rule_Data>
            </wd:Qualification_Equivalence_Rule_Data>
        </wd:Qualification_Equivalence_Rule>    
        <wd:Qualification_Equivalence_Rule xmlns:wd="urn:com.workday/bsvc"
            xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
            <wd:Qualification_Equivalence_Rule_Reference>
                <wd:ID wd:type="WID">f67d472cae9501e32555411f04061766</wd:ID>
                <wd:ID wd:type="Qualification_Equivalence_Rule">QUALIFICATION_EQUIVALENCE_RULE-6-411</wd:ID>
            </wd:Qualification_Equivalence_Rule_Reference>
            <wd:Qualification_Equivalence_Rule_Data>
                <wd:ID>QUALIFICATION_EQUIVALENCE_RULE-6-411</wd:ID>
                <wd:Qualification_Equivalence_Rule_Inactive>0</wd:Qualification_Equivalence_Rule_Inactive>
                <wd:Job_Profile_Reference>
                    <wd:ID wd:type="WID">1117412e168001250ea7f14c41031293</wd:ID>
                    <wd:ID wd:type="Job_Profile_ID">51227</wd:ID>
                </wd:Job_Profile_Reference>
                <wd:Condition_Rule_Data>
                    <wd:Condition_Rule_ID>CONDITION_RULE-6-1097</wd:Condition_Rule_ID>
                    <wd:Rule_Description>51227</wd:Rule_Description>
                    <wd:Condition_Item_Data>
                        <wd:Order>a</wd:Order>
                        <wd:And_Or_Operator_Reference>
                            <wd:ID wd:type="WID">da4e1c34446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="And_Or_Operator_Name">And</wd:ID>
                        </wd:And_Or_Operator_Reference>
                        <wd:Relational_Operator_Reference>
                            <wd:ID wd:type="WID">d5227566446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="Relational_Operator_Name">any in the selection list</wd:ID>
                        </wd:Relational_Operator_Reference>
                        <wd:Condition_Entry_Option_Reference>
                            <wd:ID wd:type="WID">da59516c446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="Condition_Entry_Option_Name">Value specified in this filter</wd:ID>
                        </wd:Condition_Entry_Option_Reference>
                        <wd:Source_External_Field_Reference>
                            <wd:ID wd:type="WID">2da3447d0426100005f7c3e752840110</wd:ID>
                        </wd:Source_External_Field_Reference>
                        <wd:Target_Instance_Reference>
                            <wd:ID wd:type="WID">f67d472cae95016d99f7feeb7a05f065</wd:ID>
                            <wd:ID wd:type="Certification_ID">BCBA</wd:ID>
                        </wd:Target_Instance_Reference>
                    </wd:Condition_Item_Data>
                </wd:Condition_Rule_Data>
            </wd:Qualification_Equivalence_Rule_Data>
        </wd:Qualification_Equivalence_Rule>
        <wd:Qualification_Equivalence_Rule xmlns:wd="urn:com.workday/bsvc"
            xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
            <wd:Qualification_Equivalence_Rule_Reference>
                <wd:ID wd:type="WID">f67d472cae95013dc439f7fc0306ba60</wd:ID>
                <wd:ID wd:type="Qualification_Equivalence_Rule">QUALIFICATION_EQUIVALENCE_RULE-6-2</wd:ID>
            </wd:Qualification_Equivalence_Rule_Reference>
            <wd:Qualification_Equivalence_Rule_Data>
                <wd:ID>QUALIFICATION_EQUIVALENCE_RULE-6-2</wd:ID>
                <wd:Qualification_Equivalence_Rule_Inactive>0</wd:Qualification_Equivalence_Rule_Inactive>
                <wd:Job_Profile_Reference>
                    <wd:ID wd:type="WID">1117412e168001d24f02c14c41030c92</wd:ID>
                    <wd:ID wd:type="Job_Profile_ID">48082</wd:ID>
                </wd:Job_Profile_Reference>
                <wd:Condition_Rule_Data>
                    <wd:Condition_Rule_ID>CONDITION_RULE-6-f67d472cae9501a42c52f7fc0306bb60</wd:Condition_Rule_ID>
                    <wd:Rule_Description>48082</wd:Rule_Description>
                    <wd:Condition_Item_Data>
                        <wd:Order>a</wd:Order>
                        <wd:And_Or_Operator_Reference>
                            <wd:ID wd:type="WID">da4e1c34446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="And_Or_Operator_Name">And</wd:ID>
                        </wd:And_Or_Operator_Reference>
                        <wd:Relational_Operator_Reference>
                            <wd:ID wd:type="WID">d5227566446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="Relational_Operator_Name">any in the selection list</wd:ID>
                        </wd:Relational_Operator_Reference>
                        <wd:Condition_Entry_Option_Reference>
                            <wd:ID wd:type="WID">da59516c446c11de98360015c5e6daf6</wd:ID>
                            <wd:ID wd:type="Condition_Entry_Option_Name">Value specified in this filter</wd:ID>
                        </wd:Condition_Entry_Option_Reference>
                        <wd:Source_External_Field_Reference>
                            <wd:ID wd:type="WID">2da3447d0426100005f7c3e752840110</wd:ID>
                        </wd:Source_External_Field_Reference>
                        <wd:Target_Instance_Reference>
                            <wd:ID wd:type="WID">f67d472cae9501f92ccd15ec7a053966</wd:ID>
                            <wd:ID wd:type="Certification_ID">CBAP</wd:ID>
                        </wd:Target_Instance_Reference>
                        <wd:Target_Instance_Reference>
                            <wd:ID wd:type="WID">f67d472cae9501f92ccd15ec7a053967</wd:ID>
                            <wd:ID wd:type="Certification_ID">PMI-PBA</wd:ID>
                        </wd:Target_Instance_Reference>
                    </wd:Condition_Item_Data>
                </wd:Condition_Rule_Data>
            </wd:Qualification_Equivalence_Rule_Data>
        </wd:Qualification_Equivalence_Rule>
    </Qualifications>
    <wd:Report_Data xmlns:wd="urn:com.workday.report/Worker_Certs">
        <wd:Report_Entry>
            <wd:Worker wd:Descriptor="Tom Hanks">
                <wd:ID wd:type="WID">b0d4df2a9611018f7b47c85f110d8230</wd:ID>
                <wd:ID wd:type="Employee_ID">770077</wd:ID>
            </wd:Worker>
            <wd:Job_Profile wd:Descriptor="48082 - Business Analyst">
                <wd:ID wd:type="WID">1117412e168001d24f02c14c41030c92</wd:ID>
                <wd:ID wd:type="Job_Profile_ID">48082</wd:ID>
            </wd:Job_Profile>
            <wd:Certification wd:Descriptor="CBAP - Certified Business Analyst Professional">
                <wd:ID wd:type="WID">b0d4df2a96110179f7d634a5310de855</wd:ID>
            </wd:Certification>
            <wd:Certification_-_Selected_group>
                <wd:referenceID>CBAP</wd:referenceID>
            </wd:Certification_-_Selected_group>
            <wd:Cert_Number>2100</wd:Cert_Number>
            <wd:Issuer>IIBA</wd:Issuer>
            <wd:Expiration_Date>2023-12-31-08:00</wd:Expiration_Date>
        </wd:Report_Entry>
        <wd:Report_Entry>
            <wd:Worker wd:Descriptor="Russel Crowe">
                <wd:ID wd:type="WID">b0d4df2a961101bdb3b6ae7b120dd829</wd:ID>
                <wd:ID wd:type="Employee_ID">77088</wd:ID>
            </wd:Worker>
            <wd:Job_Profile wd:Descriptor="51227 - Board Certified Behav Analyst">
                <wd:ID wd:type="WID">1117412e168001250ea7f14c41031293</wd:ID>
                <wd:ID wd:type="Job_Profile_ID">51227</wd:ID>
            </wd:Job_Profile>
            <wd:Certification wd:Descriptor="Board Certified Behavior Analyst - Behavior Analyst Certification Board">
                <wd:ID wd:type="WID">e27b2aff960c01a0b7f176c5b201122a</wd:ID>
            </wd:Certification>
            <wd:Certification_-_Selected_group>
                <wd:referenceID>BCBA</wd:referenceID>
            </wd:Certification_-_Selected_group>
            <wd:Cert_Number>1/11/8595</wd:Cert_Number>
            <wd:Issuer>Behavior Analyst Certification Board</wd:Issuer>
            <wd:Expiration_Date>2023-05-31-07:00</wd:Expiration_Date>
        </wd:Report_Entry>
        <wd:Report_Entry>
            <wd:Worker wd:Descriptor="Mel Gibson">
                <wd:ID wd:type="WID">b0d4df2a961101bdb3b6ae7b120dd830</wd:ID>
                <wd:ID wd:type="Employee_ID">77099</wd:ID>
            </wd:Worker>
            <wd:Job_Profile wd:Descriptor="47063 - Manager Speech / Language Pathology">
                <wd:ID wd:type="WID">1117412e168001250ea7f14c41031293</wd:ID>
                <wd:ID wd:type="Job_Profile_ID">47063</wd:ID>
            </wd:Job_Profile>
            <wd:Certification wd:Descriptor="Board Certified Behavior Analyst - Behavior Analyst Certification Board">
                <wd:ID wd:type="WID">e27b2aff960c01a0b7f176c5b201122a</wd:ID>
            </wd:Certification>
            <wd:Certification_-_Selected_group>
                <wd:referenceID>SLP</wd:referenceID>
            </wd:Certification_-_Selected_group>
            <wd:Cert_Number>112233</wd:Cert_Number>
            <wd:Issuer>PSLB</wd:Issuer>
            <wd:Expiration_Date>20232-12-31-08:00</wd:Expiration_Date>
        </wd:Report_Entry>      
    </wd:Report_Data>
</root> 

预期的输出文件 ->

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:map="http://www.w3.org/2005/xpath-functions/map"
      xmlns:wd="urn:com.workday/bsvc"
      xmlns:wd2="urn:com.workday.report/Worker_Certs">
   <Worker_Cert>
      <Emp_ID>770077</Emp_ID>
      <Job_Profile_ID>48082</Job_Profile_ID>
      <Cref>CBAP</Cref>
      <Cert_Number>2100</Cert_Number>
      <Expiration_Dt>2023-12-31</Expiration_Dt>
      <QCert>CBAP</QCert>
   </Worker_Cert>
   <Worker_Cert>
      <Emp_ID>77088</Emp_ID>
      <Job_Profile_ID>51227</Job_Profile_ID>
      <Cref>BCBA</Cref>
      <Cert_Number>1/11/8595</Cert_Number>
      <Expiration_Dt>2023-05-31</Expiration_Dt>
      <QCert>BCBA</QCert>
   </Worker_Cert>
   <Worker_Cert>
      <Emp_ID>77099</Emp_ID>
      <Job_Profile_ID>47063</Job_Profile_ID>
      <Cref>SLP</Cref>
      <Cert_Number>112233</Cert_Number>
      <Expiration_Dt>20232-12-3</Expiration_Dt>
      <QCert>SLP</QCert>
   </Worker_Cert>
</root>

【问题讨论】:

  • 至少对于传统的 XSLT 2/3,使用复合键的交叉引用查找应该可以工作。

标签: xml xslt xslt-2.0 xslt-3.0 xslt-grouping


【解决方案1】:

基于密钥的方法例如

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xpath-default-namespace="urn:com.workday/bsvc"
    xmlns:wd="urn:com.workday/bsvc"
    exclude-result-prefixes="#all"
    expand-text="yes"
    version="3.0">

  <xsl:mode on-no-match="shallow-skip"/>
  
  <xsl:template match="/root">
    <xsl:copy copy-namespaces="no">
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

  <xsl:output method="xml" indent="yes"/>
  
  <xsl:key name="ref" 
           match="Qualification_Equivalence_Rule_Data/Condition_Rule_Data/Condition_Item_Data/Target_Instance_Reference/ID[@wd:type = 'Certification_ID']" 
           use="ancestor::Qualification_Equivalence_Rule_Data/Job_Profile_Reference/ID[@wd:type = 'Job_Profile_ID'], ." 
           composite="yes"/>

  <xsl:template xpath-default-namespace="urn:com.workday.report/Worker_Certs" 
    xmlns:wd="urn:com.workday.report/Worker_Certs" 
                match="Report_Entry[key('ref', (Job_Profile/ID[@wd:type = 'Job_Profile_ID'], Certification_-_Selected_group/referenceID))]">
    <Worker_Cert>
      <Emp_ID>{Worker/ID[@wd:type = 'Employee_ID']}</Emp_ID>
      <Job_Profile_ID>{Job_Profile/ID[@wd:type = 'Job_Profile_ID']}</Job_Profile_ID>
      <Cref>{key('ref', (Job_Profile/ID[@wd:type = 'Job_Profile_ID'], Certification_-_Selected_group/referenceID))}</Cref>
    </Worker_Cert>
  </xsl:template>
  
</xsl:stylesheet>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多