Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 中的条件的xsl副本,用于每个_Xslt_Xslt 2.0 - Fatal编程技术网

Xslt 中的条件的xsl副本,用于每个

Xslt 中的条件的xsl副本,用于每个,xslt,xslt-2.0,Xslt,Xslt 2.0,以下是一个XML示例: <OUT> <Header> <LineType>H</LineType> <DocumentType>OUT</DocumentType> <ClientCode>177</ClientCode> <OrderNumber>SP03038181</OrderNumber>

以下是一个XML示例:

<OUT>
    <Header>
        <LineType>H</LineType>
        <DocumentType>OUT</DocumentType>
        <ClientCode>177</ClientCode>
        <OrderNumber>SP03038181</OrderNumber>
        <PayerINN>2636052865</PayerINN>
        <TotalItems>3</TotalItems>
    </Header>
    <Line>
        <LineType>I</LineType>
        <Unit>PCE</Unit>
        <OrderNumber>SP03038181</OrderNumber>
        <Party>A289217</Party>
        <field>20171031</field>
    </Line>
    <Line>
        <LineType>I</LineType>
        <OrderNumber>SP03038181</OrderNumber>
        <Party>0911082</Party>
        <field>20150731</field>
    </Line>
    <Header>
        <LineType>H</LineType>
        <DocumentType>OUT</DocumentType>
        <ClientCode>177</ClientCode>
        <OrderNumber>SP03038322</OrderNumber>
    </Header>
    <Line>
        <LineType>I</LineType>
        <OrderNumber>SP03038322</OrderNumber>
        <Party>Z10208</Party>
        <field>20141231</field>
    </Line>
</OUT>

无法工作,它会复制所有
节点。

尝试将for行的副本更改为:

 <xsl:copy-of select="../Line[OrderNumber = current()/OrderNumber]"/>


这将选择OrderNumber与
current()
标题相同的行条目

尝试将for行的副本更改为:

 <xsl:copy-of select="../Line[OrderNumber = current()/OrderNumber]"/>


这将选择OrderNumber与
current()相同的行条目
标题

那么谓词
行[OrderNumber=./OrderNumber]
行[OrderNumber=OrderNumber]
相同。首先,我认为您需要
Line[current()/OrderNumber=OrderNumber]
,但我强烈建议使用一个键或为每个组查找匹配的项目。

那么谓词
Line[OrderNumber=/OrderNumber]
Line[OrderNumber=OrderNumber]
相同。首先,我想您需要[code>行[current()/OrderNumber=OrderNumber],但我强烈建议您使用一个键或为每个组查找匹配的项目。

试试这个:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>
  <xsl:template match="/">
    <xsl:for-each select="*/Header">
      <xsl:variable name="orderNumber" select="OrderNumber"/>
      <part>
        <header></header>                       
        <content>
          <OUT>
            <xsl:copy-of select="."/>
            <xsl:copy-of select="//Line[OrderNumber = $orderNumber]"/>
          </OUT>
        </content>                  
      </part>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

要获得输出,请执行以下操作:

<part>
   <header></header>
   <content>
      <OUT>
         <Header>
            <LineType>H</LineType>
            <DocumentType>OUT</DocumentType>
            <ClientCode>177</ClientCode>
            <OrderNumber>SP03038181</OrderNumber>
            <PayerINN>2636052865</PayerINN>
            <TotalItems>3</TotalItems>
         </Header>
         <Line>
            <LineType>I</LineType>
            <Unit>PCE</Unit>
            <OrderNumber>SP03038181</OrderNumber>
            <Party>A289217</Party>
            <field>20171031</field>
         </Line>
         <Line>
            <LineType>I</LineType>
            <OrderNumber>SP03038181</OrderNumber>
            <Party>0911082</Party>
            <field>20150731</field>
         </Line>
      </OUT>
   </content>
</part>
<part>
   <header></header>
   <content>
      <OUT>
         <Header>
            <LineType>H</LineType>
            <DocumentType>OUT</DocumentType>
            <ClientCode>177</ClientCode>
            <OrderNumber>SP03038322</OrderNumber>
         </Header>
         <Line>
            <LineType>I</LineType>
            <OrderNumber>SP03038322</OrderNumber>
            <Party>Z10208</Party>
            <field>20141231</field>
         </Line>
      </OUT>
   </content>
</part>

H
出来
177
SP03038181
2636052865
3.
我
四氯乙烯
SP03038181
A289217
20171031
我
SP03038181
0911082
20150731
H
出来
177
SP03038322
我
SP03038322
Z10208
20141231
试试这个:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>
  <xsl:template match="/">
    <xsl:for-each select="*/Header">
      <xsl:variable name="orderNumber" select="OrderNumber"/>
      <part>
        <header></header>                       
        <content>
          <OUT>
            <xsl:copy-of select="."/>
            <xsl:copy-of select="//Line[OrderNumber = $orderNumber]"/>
          </OUT>
        </content>                  
      </part>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

要获得输出,请执行以下操作:

<part>
   <header></header>
   <content>
      <OUT>
         <Header>
            <LineType>H</LineType>
            <DocumentType>OUT</DocumentType>
            <ClientCode>177</ClientCode>
            <OrderNumber>SP03038181</OrderNumber>
            <PayerINN>2636052865</PayerINN>
            <TotalItems>3</TotalItems>
         </Header>
         <Line>
            <LineType>I</LineType>
            <Unit>PCE</Unit>
            <OrderNumber>SP03038181</OrderNumber>
            <Party>A289217</Party>
            <field>20171031</field>
         </Line>
         <Line>
            <LineType>I</LineType>
            <OrderNumber>SP03038181</OrderNumber>
            <Party>0911082</Party>
            <field>20150731</field>
         </Line>
      </OUT>
   </content>
</part>
<part>
   <header></header>
   <content>
      <OUT>
         <Header>
            <LineType>H</LineType>
            <DocumentType>OUT</DocumentType>
            <ClientCode>177</ClientCode>
            <OrderNumber>SP03038322</OrderNumber>
         </Header>
         <Line>
            <LineType>I</LineType>
            <OrderNumber>SP03038322</OrderNumber>
            <Party>Z10208</Party>
            <field>20141231</field>
         </Line>
      </OUT>
   </content>
</part>

H
出来
177
SP03038181
2636052865
3.
我
四氯乙烯
SP03038181
A289217
20171031
我
SP03038181
0911082
20150731
H
出来
177
SP03038322
我
SP03038322
Z10208
20141231