使用 xslt 将外部变量的 xml 输入合并到另一个 xml 输入中

问题描述 投票:0回答:1

我需要使用 xslt 将存储在变量中的 xml 输入与另一个 xml 输入消息合并。

XML 输入:

<?xml version="1.0" encoding="utf-8"?>
<aggregatedd>
  <cal:stack xmlns:cal="urn:calabrio">
    <cal:timeoff>
      <cal:person>473937f5-9222-4187-9d30-afe000c44702</cal:person>
      <cal:date>2024-11-01</cal:date>
      <cal:timeofftype>USA_ABS002</cal:timeofftype>
      <cal:hours>4.50</cal:hours>
    </cal:timeoff>
  </cal:stack>
  <wd:TimeOff-Stack xmlns:wd="urn:com.workday.report/CR_INT_Calabrio_Workday_TimeOff_by_Time_Period">
    <wd:TimeOff-Entry>
      <wd:WID>10636</wd:WID>
      <wd:wd-key>20241107USAABS002800</wd:wd-key>
      <wd:Date>2024-11-07</wd:Date>
      <wd:Timeoff>USA_ABS002</wd:Timeoff>
      <wd:Hours>8.00</wd:Hours>
      <wd:EntryID>TIME_OFF_ENTRY-6-1136743</wd:EntryID>
    </wd:TimeOff-Entry>
  </wd:TimeOff-Stack>
  <wd:TimeOff-Stack xmlns:wd="urn:com.workday.report/CR_Calabrio_TO_Eligible_Worker_Report">
    <wd:TimeOff-Entry>
      <wd:WID>10636</wd:WID>
      <wd:wd-key>20241107USAABS002800</wd:wd-key>
      <wd:Date>2024-11-07</wd:Date>
      <wd:Timeoff>USA_ABS002</wd:Timeoff>
      <wd:Hours>8.00</wd:Hours>
      <wd:EntryID>TIME_OFF_ENTRY-6-1136743</wd:EntryID>
    </wd:TimeOff-Entry>
  </wd:TimeOff-Stack>
</aggregatedd>

外部变量包含另一个 xml 消息

类似的东西 XML 输入 2(在外部变量中):

  <wd:Report_Data xmlns:wd="urn:com.workday.report/CR_Calabrio_TO_Eligible_Worker_Report">
    <wd:Report_Entry>
      <wd:WID>10636</wd:WID>
      <wd:Wiser_ID>10636</wd:Wiser_ID>
      <wd:Person_Id>473937f5-9222-4187-9d30-afe000c44702</wd:Person_Id>
    </wd:Report_Entry>
    <wd:Report_Entry>
      <wd:WID>10636</wd:WID>
      <wd:Wiser_ID>2222</wd:Wiser_ID>
      <wd:Person_Id>11111-22222-4187-9d30-afe000c44702</wd:Person_Id>
    </wd:Report_Entry>
  </wd:Report_Data>

我看过类似的帖子(他们需要将它们合并到匹配组下)并尝试了这个 xslt,因为我只是想将其添加到我的主聚合器节点中并稍后用于进一步处理。 xslt 失败。我无法真正在氧气中处理它,因为变量是外部的(我整个工作室组件的一部分)。 XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:wd="urn:com.workday.report/CR_INT_Calabrio_Workday_TimeOff_by_Time_Period
    CR_Calabrio_TO_Eligible_Worker_Report"
    
    xmlns:cal="urn:calabrio"
    exclude-result-prefixes="#all">
    <xsl:output method="xml" indent = "yes"  />
    <xsl:param name="wdwiserreport"/>
    <xsl:variable name="report-doc" select="doc($wdwiserreport)"/>
    
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="aggregatedd">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()[not(self::cal:stack)] |@* | node()[not(self::wd:TimeOff-Stack)]" />
            <xsl:apply-templates select="copy-of($report-doc)" />
        </xsl:copy>
    </xsl:template>
    
    
</xsl:stylesheet>

我参考了此处发布的类似问题,并尝试了上面分享的 xslt,但收到错误。请告知我如何使用外部变量并将其合并到我的主 xml 中。谢谢。感谢任何意见。

我只是想将变量输出添加到我的聚合器节点以进行进一步处理 所需输出:

<?xml version="1.0" encoding="utf-8"?>
<aggregatedd>
<wd:Report_Data xmlns:wd="urn:com.workday.report/CR_Calabrio_TO_Eligible_Worker_Report">
        <wd:Report_Entry>
          <wd:WID>10636</wd:WID>
          <wd:Wiser_ID>10636</wd:Wiser_ID>
          <wd:Person_Id>473937f5-9222-4187-9d30-afe000c44702</wd:Person_Id>
        </wd:Report_Entry>
        <wd:Report_Entry>
          <wd:WID>10636</wd:WID>
          <wd:Wiser_ID>2222</wd:Wiser_ID>
          <wd:Person_Id>11111-22222-4187-9d30-afe000c44702</wd:Person_Id>
        </wd:Report_Entry>
      </wd:Report_Data>
<cal:stack xmlns:cal="urn:calabrio">
   <cal:timeoff>
      <cal:person>473937f5-9222-4187-9d30-afe000c44702</cal:person>
      <cal:date>2024-11-01</cal:date>
      <cal:timeofftype>USA_ABS002</cal:timeofftype>
      <cal:hours>4.50</cal:hours>
   </cal:timeoff>
</cal:stack>
   <wd:TimeOff-Stack xmlns:wd="urn:com.workday.report/CR_INT_Calabrio_Workday_TimeOff_by_Time_Period">
      <wd:TimeOff-Entry>
         <wd:WiserID>10636</wd:WiserID>
         <wd:wd-key>20241107USAABS002800</wd:wd-key>
         <wd:Date>2024-11-07</wd:Date>
         <wd:Timeoff>USA_ABS002</wd:Timeoff>
         <wd:Hours>8.00</wd:Hours>
         <wd:EntryID>TIME_OFF_ENTRY-6-1136743</wd:EntryID>
      </wd:TimeOff-Entry>
   </wd:TimeOff-Stack>
   <wd:TimeOff-Stack xmlns:wd="urn:com.workday.report/CR_Calabrio_TO_Eligible_Worker_Report">
<wd:TimeOff-Entry>
<wd:WiserID>10636</wd:WiserID>
<wd:wd-key>20241107USAABS002800</wd:wd-key>
<wd:Date>2024-11-07</wd:Date>
<wd:Timeoff>USA_ABS002</wd:Timeoff>
<wd:Hours>8.00</wd:Hours>
<wd:EntryID>TIME_OFF_ENTRY-6-1136743</wd:EntryID>
</wd:TimeOff-Entry>
</wd:TimeOff-Stack></aggregatedd>
xml xslt-2.0
1个回答
0
投票

看来

<xsl:template match="aggregatedd">
  <xsl:copy>
    <xsl:copy-of select="$report-doc, node()"/>
  </xsl:copy>
</xsl:template>

足以创建现在发布的所需结果。

© www.soinside.com 2019 - 2024. All rights reserved.