首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT模板在Value = to Array项时从Array检索

XSLT模板在Value = to Array项时从Array检索
EN

Stack Overflow用户
提问于 2022-05-12 17:33:40
回答 1查看 67关注 0票数 1

我对XSLT的可行解决方案非常深入,我正在创建一个基于条目数组的新XML结构。

我的源XML如下所示,突出显示粗体的批处理数组。

代码语言:javascript
复制
<root>
  <Header>
    <Source>Company</Source>
    <Target>CQ</Target>
    <FileType>SalesOrder</FileType>
  </Header>
  <Body>
    <Item>
      <ItemType>RES</ItemType>
      <PrimaryKey>OrderNumber</PrimaryKey>
      <OrderNumber>OrderNumber</OrderNumber>
      <CompanyCode>ZA01</CompanyCode>
      <Company>Company</Company>
      <FromWarehouseCode>WarehouseCode</FromWarehouseCode>
      <DeliveryDate>2022-04-29T00:00:00</DeliveryDate>
      <NumberOfLines>4</NumberOfLines>
      <Additional1>4039361000004</Additional1>
      <Module>Outbound</Module>
      <ItemLine>
        <ForeignKey>3523108912</ForeignKey>
        <BatchArray>
          <LineNumber>900001</LineNumber>
          <ProductCode>F00000065</ProductCode>
          <SKUCode>PCE</SKUCode>
          <Batch>C5AH066</Batch>
          <Quantity>15</Quantity>
          <ExpiryDate>2023-07-31</ExpiryDate>
          <Weight>85.080</Weight>
          <Additional5 />
        </BatchArray>
      </ItemLine>
      <ItemLine>
        <ForeignKey>3523108912</ForeignKey>
        <BatchArray>
          <LineNumber>900002</LineNumber>
          <ProductCode>F00000065</ProductCode>
          <SKUCode>PCE</SKUCode>
          <Batch>C5AK296</Batch>
          <Quantity>5</Quantity>
          <ExpiryDate>2023-09-30</ExpiryDate>
          <Weight>28.360</Weight>
          <Additional5 />
        </BatchArray>
      </ItemLine>
      <ItemLine>
        <ForeignKey>3523108912</ForeignKey>
        <BatchArray>
          <LineNumber>000020</LineNumber>
          <ProductCode>5088821</ProductCode>
          <SKUCode>PCE</SKUCode>
          **<Batch>O2C-02_01</Batch>
          <Batch>O2C-02_02</Batch>
          <Batch>O2C-02_03</Batch>**
          <Quantity>1</Quantity>
          <ExpiryDate>2099-12-31</ExpiryDate>
          <Weight>399.000</Weight>
          <Additional5>O2C-02_01</Additional5>
          <Additional5>O2C-02_02</Additional5>
          <Additional5>O2C-02_03</Additional5>
        </BatchArray>
      </ItemLine>
    </Item>
  </Body>
</root>

我的XSLT模板如下:

代码语言:javascript
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns="http://exampleincludednamespace.com/"
    exclude-result-prefixes="ns">
  <xsl:output method="xml" omit-xml-declaration="yes" />
  <xsl:template match="/">
    <root>
      <xsl:copy-of select='root/Header'/>
      <Body>
        <xsl:copy-of select="root/Body/Item" />
        <xsl:for-each select='root/Body/Item/ItemLine/BatchArray/Batch'>
          <ItemLine>
            <BatchArray>
              <ForeignKey>
                <xsl:value-of select='../../ForeignKey' />
              </ForeignKey>
              <LineNumber>
                <xsl:value-of select='../LineNumber' />
              </LineNumber>
              <ProductCode>
                <xsl:value-of select='../ProductCode' />
              </ProductCode>
              <SKUCode>
                <xsl:value-of select='../SKUCode' />
              </SKUCode>
              <Batch>
                <xsl:value-of select='.' />
              </Batch>
              <Quantity>
                <xsl:value-of select='../Quantity' />
              </Quantity>
              <ExpiryDate>
                <xsl:value-of select='../ExpiryDate' />
              </ExpiryDate>
              <Weight>
                <xsl:value-of select='../Weight' />
              </Weight>
              <Additional5>
                <xsl:value-of select='../Batch[BatchArray/Additional5 = BatchArray/Batch]' />
              </Additional5>
            </BatchArray>
          </ItemLine>
        </xsl:for-each>
      </Body>
    </root>
  </xsl:template>
</xsl:stylesheet>

我想要它做的是用来自Additional5数组的值填充additional5标记,该值等于批处理数组的当前位置。

这个当前返回的是正确的嵌套,但是我的additional5不正确或者是空的。

代码语言:javascript
复制
<root>
  <Header>
    <Source>Company</Source>
    <Target>CQ</Target>
    <FileType>SalesOrder</FileType>
  </Header>
  <Body>
    <Item>
      <ItemType>RES</ItemType>
      <PrimaryKey>OrderNumber</PrimaryKey>
      <OrderNumber>OrderNumber</OrderNumber>
      <CompanyCode>ZA01</CompanyCode>
      <Company>Company</Company>
      <FromWarehouseCode>WarehouseCode</FromWarehouseCode>
      <DeliveryDate>2022-04-29T00:00:00</DeliveryDate>
      <NumberOfLines>4</NumberOfLines>
      <Additional1>4039361000004</Additional1>
      <Module>Outbound</Module>
      <ItemLine>
        <ForeignKey>3523108912</ForeignKey>
        <BatchArray>
          <LineNumber>900001</LineNumber>
          <ProductCode>F00000065</ProductCode>
          <SKUCode>PCE</SKUCode>
          <Batch>C5AH066</Batch>
          <Quantity>15</Quantity>
          <ExpiryDate>2023-07-31</ExpiryDate>
          <Weight>85.080</Weight>
          <Additional5 />
        </BatchArray>
      </ItemLine>
      <ItemLine>
        <ForeignKey>3523108912</ForeignKey>
        <BatchArray>
          <LineNumber>900002</LineNumber>
          <ProductCode>F00000065</ProductCode>
          <SKUCode>PCE</SKUCode>
          <Batch>C5AK296</Batch>
          <Quantity>5</Quantity>
          <ExpiryDate>2023-09-30</ExpiryDate>
          <Weight>28.360</Weight>
          <Additional5 />
        </BatchArray>
      </ItemLine>
      <ItemLine>
        <ForeignKey>3523108912</ForeignKey>
        <BatchArray>
          <LineNumber>000020</LineNumber>
          <ProductCode>5088821</ProductCode>
          <SKUCode>PCE</SKUCode>
          <Batch>O2C-02_01</Batch>
          <Batch>O2C-02_02</Batch>
          <Batch>O2C-02_03</Batch>
          <Quantity>1</Quantity>
          <ExpiryDate>2099-12-31</ExpiryDate>
          <Weight>399.000</Weight>
          <Additional5>O2C-02_01</Additional5>
          <Additional5>O2C-02_02</Additional5>
          <Additional5>O2C-02_03</Additional5>
        </BatchArray>
      </ItemLine>
    </Item>
    <ItemLine>
      <BatchArray>
        <ForeignKey>3523108912</ForeignKey>
        <LineNumber>900001</LineNumber>
        <ProductCode>F00000065</ProductCode>
        <SKUCode>PCE</SKUCode>
        <Batch>C5AH066</Batch>
        <Quantity>15</Quantity>
        <ExpiryDate>2023-07-31</ExpiryDate>
        <Weight>85.080</Weight>
        <Additional5></Additional5>
      </BatchArray>
    </ItemLine>
    <ItemLine>
      <BatchArray>
        <ForeignKey>3523108912</ForeignKey>
        <LineNumber>900002</LineNumber>
        <ProductCode>F00000065</ProductCode>
        <SKUCode>PCE</SKUCode>
        <Batch>C5AK296</Batch>
        <Quantity>5</Quantity>
        <ExpiryDate>2023-09-30</ExpiryDate>
        <Weight>28.360</Weight>
        <Additional5></Additional5>
      </BatchArray>
    </ItemLine>
    <ItemLine>
      <BatchArray>
        <ForeignKey>3523108912</ForeignKey>
        <LineNumber>000020</LineNumber>
        <ProductCode>5088821</ProductCode>
        <SKUCode>PCE</SKUCode>
        <Batch>O2C-02_01</Batch>
        <Quantity>1</Quantity>
        <ExpiryDate>2099-12-31</ExpiryDate>
        <Weight>399.000</Weight>
        <Additional5></Additional5>
      </BatchArray>
    </ItemLine>
    <ItemLine>
      <BatchArray>
        <ForeignKey>3523108912</ForeignKey>
        <LineNumber>000020</LineNumber>
        <ProductCode>5088821</ProductCode>
        <SKUCode>PCE</SKUCode>
        <Batch>O2C-02_02</Batch>
        <Quantity>1</Quantity>
        <ExpiryDate>2099-12-31</ExpiryDate>
        <Weight>399.000</Weight>
        <Additional5></Additional5>
      </BatchArray>
    </ItemLine>
    <ItemLine>
      <BatchArray>
        <ForeignKey>3523108912</ForeignKey>
        <LineNumber>000020</LineNumber>
        <ProductCode>5088821</ProductCode>
        <SKUCode>PCE</SKUCode>
        <Batch>O2C-02_03</Batch>
        <Quantity>1</Quantity>
        <ExpiryDate>2099-12-31</ExpiryDate>
        <Weight>399.000</Weight>
        <Additional5></Additional5>
      </BatchArray>
    </ItemLine>
  </Body>
</root>

我哪里出问题了?

EN

回答 1

Stack Overflow用户

发布于 2022-05-12 18:03:46

考虑以下最小化示例:

XSLT1.0

代码语言:javascript
复制
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
  
<xsl:template match="/root">
    <root>
        <!-- omitted -->
        <Body>
            <!-- omitted -->
            <xsl:for-each select="Body/Item/ItemLine/BatchArray">
                <xsl:for-each select="Batch">
                    <xsl:variable name="i" select="position()" />
                    <ItemLine>
                        <BatchArray>
                            <!-- omitted -->
                            <Batch>
                                <xsl:value-of select='.' />
                            </Batch>
                            <!-- omitted -->
                            <Additional5>
                                <xsl:value-of select='../Additional5[$i]' />
                            </Additional5>
                        </BatchArray>
                    </ItemLine>
                </xsl:for-each>
            </xsl:for-each>
        </Body>
    </root>
</xsl:template>

</xsl:stylesheet>

应用于您的输入示例,这将产生:

结果

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<root>
   <Body>
      <ItemLine>
         <BatchArray>
            <Batch>C5AH066</Batch>
            <Additional5/>
         </BatchArray>
      </ItemLine>
      <ItemLine>
         <BatchArray>
            <Batch>C5AK296</Batch>
            <Additional5/>
         </BatchArray>
      </ItemLine>
      <ItemLine>
         <BatchArray>
            <Batch>O2C-02_01</Batch>
            <Additional5>O2C-02_01</Additional5>
         </BatchArray>
      </ItemLine>
      <ItemLine>
         <BatchArray>
            <Batch>O2C-02_02</Batch>
            <Additional5>O2C-02_02</Additional5>
         </BatchArray>
      </ItemLine>
      <ItemLine>
         <BatchArray>
            <Batch>O2C-02_03</Batch>
            <Additional5>O2C-02_03</Additional5>
         </BatchArray>
      </ItemLine>
   </Body>
</root>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72219943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档