AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

    • 主页
    • 系统&网络
    • Ubuntu
    • Unix
    • DBA
    • Computer
    • Coding
    • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-215234

Rookie Programmer Aravind's questions

Martin Hope
Rookie Programmer Aravind
Asked: 2025-01-20 19:58:13 +0800 CST

XSLT 转换:使用 XSLT 1.0 的位置和当前用法

  • 6

这是输入 XML:

<deliveryStatusRequest>
    <Partner>
        <partyRoleId>A47422</partyRoleId>
        <Banner>
            <partyRoleId>A47423</partyRoleId>
            <POS>
                <partyRoleId>A47424</partyRoleId>
            </POS>
            <POS>
                <partyRoleId>A47425</partyRoleId>
            </POS>
        </Banner>
        <Banner>
            <partyRoleId>A47426</partyRoleId>
            <POS>
                <partyRoleId>A47428</partyRoleId>
            </POS>
        </Banner>
    </Partner>
    <ProcessData>
        <Partner>
            <returnCode>00</returnCode>
            <returnDescription>123456789</returnDescription>
            <Banner>
                <returnCode>00</returnCode>
                <returnDescription>234567890</returnDescription>
                <POS>
                    <returnCode>01</returnCode>
                    <returnDescription>Some error</returnDescription>
                </POS>
                <POS>
                    <returnCode>00</returnCode>
                    <returnDescription>456789012</returnDescription>
                </POS>
            </Banner>
            <Banner>
                <returnCode>00</returnCode>
                <returnDescription>567890123</returnDescription>
                <POS>
                    <returnCode>02</returnCode>
                    <returnDescription>Some Error</returnDescription>
                </POS>
            </Banner>
        </Partner>
    </ProcessData>
</deliveryStatusRequest>

这是预期的输出:

<SiebelMessage
                   MessageType="Integration Object"
                   IntObjectName="SFA Create Update Seller IO"
                   IntObjectFormat="Siebel Hierarchical">
    <ListOfSfaCreateUpdateSellerIo>
        <SfaSubAccountmasterBc>
            <CodiceSFA/> <!--Mapped to PartyRowId-->
            <CodiceSAP> <!--Mapped to returnDescription if returnCode is 00-->
            <StatoSAP> <!--"Attivo" If returnCode is 00 -->  
            <StatoCommerciale> <!-- "Attivo" If returnCode is 00 else set to "Prospect"-->
            <DescrizioneRitornoSAP> <!--Mapped to returnDescription if returnCode is not 00-->
            <ListOfSfaSubaccountInsegnaBc>
                <SfaSubaccountInsegnaBc>
                    <CodiceSFA/> <!--Mapped to PartyRowId-->
                    <CodiceSAP> <!--Mapped to returnDescription if returnCode is 00-->
                    <StatoSAP> <!--"Attivo" If returnCode is 00 -->  
                    <StatoCommerciale> <!-- "Attivo" If returnCode is 00 else set to "Prospect"-->
                    <DescrizioneRitornoSAP> <!--Mapped to returnDescription if returnCode is not 00-->
                    <ListOfSfaSubaccountPdvBc>
                        <SfaSubaccountPdvBc>                
                            <CodiceSFA/> <!--Mapped to PartyRowId-->
                            <CodiceSAP> <!--Mapped to returnDescription if returnCode is 00--
                            <StatoSAP> <!--"Attivo" If returnCode is 00 -->  
                            <StatoCommerciale> <!-- "Attivo" If returnCode is 00 else set to "Prospect"-->
                            <DescrizioneRitornoSAP> <!--Mapped to returnDescription if returnCode is not 00-->
                        </SfaSubaccountPdvBc>
                    </ListOfSfaSubaccountPdvBc>
                </SfaSubaccountInsegnaBc>
            </ListOfSfaSubaccountInsegnaBc>
        </SfaSubAccountmasterBc>
    </ListOfSfaCreateUpdateSellerIo>
</SiebelMessage>
                    

我已经创建了 XSLT,但是它不起作用:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="deliveryStatusRequest">
    <SiebelMessage MessageType="Integration Object" IntObjectName="SFA Create Update Seller IO" IntObjectFormat="Siebel Hierarchical">
      <ListOfSfaCreateUpdateSellerIo>
        <xsl:apply-templates select="Partner"/>
      </ListOfSfaCreateUpdateSellerIo>
    </SiebelMessage>
  </xsl:template>

  <xsl:template match="Partner">
    <SfaSubAccountmasterBc>
      <CodiceSFA><xsl:value-of select="partyRoleId"/></CodiceSFA>
      <CodiceSAP>
        <xsl:if test="../ProcessData/Partner/returnCode = '00'">
          <xsl:value-of select="../ProcessData/Partner/returnDescription"/>
        </xsl:if>
      </CodiceSAP>
      <StatoSAP>
          <xsl:if test="../ProcessData/Partner/returnCode = '00'">Attivo</xsl:if>
      </StatoSAP>
      <StatoCommerciale>
        <xsl:choose>
          <xsl:when test="../ProcessData/Partner/returnCode = '00'">Attivo</xsl:when>
          <xsl:otherwise>Prospect</xsl:otherwise>
        </xsl:choose>
      </StatoCommerciale>
      <DescrizioneRitornoSAP>
        <xsl:if test="../ProcessData/Partner/returnCode != '00'">
          <xsl:value-of select="../ProcessData/Partner/returnDescription"/>
        </xsl:if>
      </DescrizioneRitornoSAP>
      <ListOfSfaSubaccountInsegnaBc>
        <xsl:apply-templates select="Banner"/>
      </ListOfSfaSubaccountInsegnaBc>
    </SfaSubAccountmasterBc>
  </xsl:template>

  <xsl:template match="Banner">
    <SfaSubaccountInsegnaBc>
      <CodiceSFA><xsl:value-of select="partyRoleId"/></CodiceSFA>
      <xsl:variable name="bannerIndex" select="count(preceding-sibling::Banner) + 1"/>
      <CodiceSAP>
        <xsl:if test="../../ProcessData/Partner/Banner[$bannerIndex]/returnCode = '00'">
          <xsl:value-of select="../../ProcessData/Partner/Banner[$bannerIndex]/returnDescription"/>
        </xsl:if>
      </CodiceSAP>
      <StatoSAP>
          <xsl:if test="../../ProcessData/Partner/Banner[$bannerIndex]/returnCode = '00'">Attivo</xsl:if>
      </StatoSAP>
      <StatoCommerciale>
        <xsl:choose>
          <xsl:when test="../../ProcessData/Partner/Banner[$bannerIndex]/returnCode = '00'">Attivo</xsl:when>
          <xsl:otherwise>Prospect</xsl:otherwise>
        </xsl:choose>
      </StatoCommerciale>
      <DescrizioneRitornoSAP>
        <xsl:if test="../../ProcessData/Partner/Banner[$bannerIndex]/returnCode != '00'">
          <xsl:value-of select="../../ProcessData/Partner/Banner[$bannerIndex]/returnDescription"/>
        </xsl:if>
      </DescrizioneRitornoSAP>
      <ListOfSfaSubaccountPdvBc>
        <xsl:apply-templates select="POS"/>
      </ListOfSfaSubaccountPdvBc>
    </SfaSubaccountInsegnaBc>
  </xsl:template>

  <xsl:template match="POS">
    <SfaSubaccountPdvBc>
      <CodiceSFA><xsl:value-of select="partyRoleId"/></CodiceSFA>
      <xsl:variable name="bannerIndex" select="count(../../preceding-sibling::Banner) + 1"/>
      <xsl:variable name="posIndex" select="count(preceding-sibling::POS) + 1"/>
      <CodiceSAP>
        <xsl:if test="../../../../ProcessData/Partner/Banner[$bannerIndex]/POS[$posIndex]/returnCode = '00'">
          <xsl:value-of select="../../../../ProcessData/Partner/Banner[$bannerIndex]/POS[$posIndex]/returnDescription"/>
        </xsl:if>
      </CodiceSAP>
      <StatoSAP>
          <xsl:if test="../../../../ProcessData/Partner/Banner[$bannerIndex]/POS[$posIndex]/returnCode = '00'">Attivo</xsl:if>
      </StatoSAP>
      <StatoCommerciale>
        <xsl:choose>
          <xsl:when test="../../../../ProcessData/Partner/Banner[$bannerIndex]/POS[$posIndex]/returnCode = '00'">Attivo</xsl:when>
          <xsl:otherwise>Prospect</xsl:otherwise>
        </xsl:choose>
      </StatoCommerciale>
      <DescrizioneRitornoSAP>
        <xsl:if test="../../../../ProcessData/Partner/Banner[$bannerIndex]/POS[$posIndex]/returnCode != '00'">
          <xsl:value-of select="../../../../ProcessData/Partner/Banner[$bannerIndex]/POS[$posIndex]/returnDescription"/>
        </xsl:if>
      </DescrizioneRitornoSAP>
    </SfaSubaccountPdvBc>
  </xsl:template>
</xsl:stylesheet>

我得到了这样的输出,在 POS 下它没有正确映射输出。它甚至没有将 ReturnDescription 映射到 Description 标签。

<?xml version="1.0" encoding="UTF-8"?>
<SiebelMessage MessageType="Integration Object"
               IntObjectName="SFA Create Update Seller IO"
               IntObjectFormat="Siebel Hierarchical">
   <ListOfSfaCreateUpdateSellerIo>
      <SfaSubAccountmasterBc>
         <CodiceSFA>A47422</CodiceSFA>
         <CodiceSAP>123456789</CodiceSAP>
         <StatoSAP>Attivo</StatoSAP>
         <StatoCommerciale>Attivo</StatoCommerciale>
         <DescrizioneRitornoSAP/>
         <ListOfSfaSubaccountInsegnaBc>
            <SfaSubaccountInsegnaBc>
               <CodiceSFA>A47423</CodiceSFA>
               <CodiceSAP>234567890</CodiceSAP>
               <StatoSAP>Attivo</StatoSAP>
               <StatoCommerciale>Attivo</StatoCommerciale>
               <DescrizioneRitornoSAP/>
               <ListOfSfaSubaccountPdvBc>
                  <SfaSubaccountPdvBc>
                     <CodiceSFA>A47424</CodiceSFA>
                     <CodiceSAP/>
                     <StatoSAP/>
                     <StatoCommerciale>Prospect</StatoCommerciale>
                     <DescrizioneRitornoSAP/>
                  </SfaSubaccountPdvBc>
                  <SfaSubaccountPdvBc>
                     <CodiceSFA>A47425</CodiceSFA>
                     <CodiceSAP/>
                     <StatoSAP/>
                     <StatoCommerciale>Prospect</StatoCommerciale>
                     <DescrizioneRitornoSAP/>
                  </SfaSubaccountPdvBc>
               </ListOfSfaSubaccountPdvBc>
            </SfaSubaccountInsegnaBc>
            <SfaSubaccountInsegnaBc>
               <CodiceSFA>A47426</CodiceSFA>
               <CodiceSAP>567890123</CodiceSAP>
               <StatoSAP>Attivo</StatoSAP>
               <StatoCommerciale>Attivo</StatoCommerciale>
               <DescrizioneRitornoSAP/>
               <ListOfSfaSubaccountPdvBc>
                  <SfaSubaccountPdvBc>
                     <CodiceSFA>A47428</CodiceSFA>
                     <CodiceSAP/>
                     <StatoSAP/>
                     <StatoCommerciale>Prospect</StatoCommerciale>
                     <DescrizioneRitornoSAP/>
                  </SfaSubaccountPdvBc>
               </ListOfSfaSubaccountPdvBc>
            </SfaSubaccountInsegnaBc>
         </ListOfSfaSubaccountInsegnaBc>
      </SfaSubAccountmasterBc>
   </ListOfSfaCreateUpdateSellerIo>
</SiebelMessage>

逻辑如下:POS 的 CodiceSAP:如果 returnCode = '00',则填充 CodiceSAP。POS 的 DescrizioneRitornoSAP:仅当 returnCode != '00' 时填充。POS 的 StatoSAP 和 StatoCommerciale:当 returnCode = '00' 时设置为 Attivo;否则,默认为“”(StatoSAP)和“Prospect”(对于 StatoCommerciale)。

xml
  • 2 个回答
  • 26 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助
subwaysurfers
my femboy roommate

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve