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
XSLT1.0。我需要在下面的表达式中选择几个节点并排除其他节点_Xslt_Xslt 1.0 - Fatal编程技术网

XSLT1.0。我需要在下面的表达式中选择几个节点并排除其他节点

XSLT1.0。我需要在下面的表达式中选择几个节点并排除其他节点,xslt,xslt-1.0,Xslt,Xslt 1.0,我需要只包含E0同级的所有01 recordCode节点,但需要忽略E2和E3下的节点,我将使用下面的代码获得所有01,然后是E0。不确定如何创建上面的键,该键只会导致一个节点的所有01只跟在E0后面。 这是我当前的xslt <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- Generate keys for Approver, VAT, a

我需要只包含E0同级的所有01 recordCode节点,但需要忽略E2和E3下的节点,我将使用下面的代码获得所有01,然后是E0。不确定如何创建上面的键,该键只会导致一个节点的所有01只跟在E0后面。 这是我当前的xslt

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <!-- Generate keys for Approver, VAT, and Narrative Arrays -->
    <xsl:key name="kApproverDetailArray" match="faRecord[recordCode='01']" use="generate-id(preceding-sibling::faRecord[recordCode='E0'][1])" />
    <xsl:key name="kVATDetailArray" match="faRecord[recordCode='02']" use="generate-id(preceding-sibling::faRecord[recordCode='E0'][1])" />
    <xsl:key name="kNarrativeArray" match="faRecord[recordCode='03']" use="generate-id(preceding-sibling::faRecord[recordCode='E0'][1])" />
    <xsl:key name="kItemWorkCodeNarrativeArray" match="faRecord[recordCode='01']" use="generate-id(preceding-sibling::faRecord[recordCode='E2'][1])" />
    <xsl:key name="kOrderRecordApproverArray" match="faRecord[recordCode='01']" use="generate-id(preceding-sibling::faRecord[recordCode='E3'][1])" />

    <xsl:template match="InvoiceDisplayRequest">
        <MCSResponse>
            <InvoiceDisplayResponse>
                <xsl:apply-templates select="*/faRecord[recordCode='E0']" mode="InvoiceDisplayResponse" />
                    <xsl:apply-templates select="facXML/faRecord[recordCode='E1']" mode="InvoiceDisplayResponse" />
                    <xsl:apply-templates select="facXML/faRecord[recordCode='E3']" mode="InvoiceDisplayResponse" />
                    <xsl:apply-templates select="facXML/faRecord[recordCode='E2']" mode="InvoiceDisplayResponse" />
            </InvoiceDisplayResponse>
        </MCSResponse>
    </xsl:template>

    <xsl:template match="faRecord[recordCode='E0']" mode="InvoiceDisplayResponse">
        <InvoiceDisplayDetail>
            <xsl:apply-templates select="item" mode="InvoiceDisplayDetail" />
            <xsl:apply-templates select="key('kApproverDetailArray', generate-id())" mode="InvoiceDisplayResponse" />
            <xsl:apply-templates select="key('kVATDetailArray', generate-id())" mode="InvoiceDisplayResponse"/>
            <xsl:apply-templates select="key('kNarrativeArray', generate-id())" mode="InvoiceDisplayResponse"/>
        </InvoiceDisplayDetail>
    </xsl:template>

    <!-- InvoiceDisplayDetail fields  -->   
    <xsl:template match="item[itemMapCode='1']" mode="InvoiceDisplayDetail">
        <LogNumber>
            <xsl:value-of select="./itemValue" />
        </LogNumber>
    </xsl:template>

    <xsl:template match="item[itemMapCode='2']" mode="InvoiceDisplayDetail">
        <LogAddedDate>
            <xsl:value-of select="./itemValue" />
        </LogAddedDate>
    </xsl:template>


    <!-- Approver Array fields  -->
    <xsl:template match="faRecord[recordCode='01']" mode="InvoiceDisplayResponse">
        <ApproverArray> 
            <xsl:apply-templates select="item" mode="ApproverArray" />
        </ApproverArray> 
    </xsl:template>

    <!-- VAT Array fields  -->
    <xsl:template match="faRecord[recordCode='02']" mode="InvoiceDisplayResponse">
        <VATDetailArray> 
            <xsl:apply-templates select="item" mode="VATDetailArray" />
        </VATDetailArray> 
    </xsl:template>

    <xsl:template match="item[itemMapCode='1']" mode="VATDetailArray">
        <VATSequence>
            <xsl:value-of select="./itemValue" />
        </VATSequence>
    </xsl:template>


    <!-- Narrative Array fields  -->
    <xsl:template match="faRecord[recordCode='03']" mode="InvoiceDisplayResponse">
        <NarrativeArray> 
            <xsl:apply-templates select="item" mode="NarrativeArray" />
        </NarrativeArray> 
    </xsl:template>


    <xsl:template match="item[itemMapCode='1']" mode="NarrativeArray">
        <Narrative>
            <xsl:value-of select="./itemValue" />
        </Narrative>
    </xsl:template>


    <xsl:template match="faRecord[recordCode='E1']" mode="InvoiceDisplayResponse">
        <ItemRecord>
            <xsl:apply-templates select="item" mode="InvoiceItemRecord" />
        </ItemRecord>
    </xsl:template>


    <xsl:template match="faRecord[recordCode='E2']" mode="InvoiceDisplayResponse">
        <ItemWorkCodeRecord>
            <xsl:apply-templates select="item" mode="InvoiceItemWorkCodeRecord" />
            <xsl:apply-templates select="key('kItemWorkCodeNarrativeArray', generate-id())" mode="InvoiceItemWorkCodeRecord"/>
        </ItemWorkCodeRecord>
    </xsl:template>
    <!-- Invoice Item WorkCode (E2 response) Narrative Array fields  -->
    <xsl:template match="faRecord[recordCode='01']" mode="InvoiceItemWorkCodeRecord">
        <NarrativeArray> 
            <xsl:apply-templates select="item" mode="ItemWorkCodeNarrativeArray" />
        </NarrativeArray> 
    </xsl:template>
    <xsl:template match="item[itemMapCode='1']" mode="ItemWorkCodeNarrativeArray">
        <Narrative>
            <xsl:value-of select="./itemValue" />
        </Narrative>
    </xsl:template>


    <xsl:template match="faRecord[recordCode='E3']" mode="InvoiceDisplayResponse">
        <OrderRecord>
            <xsl:apply-templates select="item" mode="OrderArray" />
            <xsl:apply-templates select="key('kOrderRecordApproverArray', generate-id())" mode="InvoiceOrderRecord" />
        </OrderRecord>
    </xsl:template>

    <!-- Invoice order record (E3 response) Approver Array fields  -->
    <xsl:template match="faRecord[recordCode='01']" mode="InvoiceOrderRecord">
        <ApproverArray> 
            <xsl:apply-templates select="item" mode="ApproverArray" />
        </ApproverArray> 
    </xsl:template>



    <!--  Ignore any other fields -->
    <xsl:template match="*" mode="InvoiceDisplayDetail"/>

</xsl:stylesheet>

这是我的xml源代码

<?xml version="1.0" encoding="UTF-8"?>
<InvoiceDisplayRequest>
    <facXML>
        <faRecord>
            <recordCode>E0</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>B000011</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>01</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>1</itemValue>
            </item>
            <item>
                <itemMapCode>2</itemMapCode>
                <itemValue>2000</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>01</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>1</itemValue>
            </item>
            <item>
                <itemMapCode>2</itemMapCode>
                <itemValue>2000</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>E0</recordCode>
            <item>
                <itemMapCode>41</itemMapCode>
                <itemValue>N</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>02</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>1</itemValue>
            </item>
            <item>
                <itemMapCode>2</itemMapCode>
                <itemValue>S</itemValue>
            </item>
            <item>
                <itemMapCode>3</itemMapCode>
                <itemValue>STRD</itemValue>
            </item>
            <item>
                <itemMapCode>4</itemMapCode>
                <itemValue>3080</itemValue>
            </item>
            <item>
                <itemMapCode>5</itemMapCode>
                <itemValue>0</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>03</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>narrative at invoice level here. Invoice log will only allow me to input 100 characters I believe. E</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>E1</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>1</itemValue>
            </item>
            <item>
                <itemMapCode>2</itemMapCode>
                <itemValue>TFR</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>E2</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>1</itemValue>
            </item>
            <item>
                <itemMapCode>2</itemMapCode>
                <itemValue>1</itemValue>
            </item>
            <item>
                <itemMapCode>3</itemMapCode>
                <itemValue>02</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>01</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>01</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>01</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>E2</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>1</itemValue>
            </item>
            <item>
                <itemMapCode>2</itemMapCode>
                <itemValue>2</itemValue>
            </item>
            <item>
                <itemMapCode>3</itemMapCode>
                <itemValue>AC</itemValue>
            </item>
            <item>
                <itemMapCode>4</itemMapCode>
                <itemValue>Actor</itemValue>
            </item>
            <item>
                <itemMapCode>5</itemMapCode>
                <itemValue>5400</itemValue>
            </item>
            <item>
                <itemMapCode>6</itemMapCode>
                <itemValue>0</itemValue>
            </item>
            <item>
                <itemMapCode>7</itemMapCode>
                <itemValue>1</itemValue>
            </item>
            <item>
                <itemMapCode>8</itemMapCode>
                <itemValue>1080</itemValue>
            </item>
            <item>
                <itemMapCode>9</itemMapCode>
                <itemValue>0</itemValue>
            </item>
        </faRecord>
        <faRecord>
            <recordCode>01</recordCode>
            <item>
                <itemMapCode>1</itemMapCode>
                <itemValue>narrative at gird level here</itemValue>
            </item>
        </faRecord>
    </facXML>
</InvoiceDisplayRequest>

E0
1.
B000011
01
1.
1.
2.
2000
01
1.
1.
2.
2000
E0
41
N
02
1.
1.
2.
s
3.
标准
4.
3080
5.
0
03
1.
这里是发票层面的叙述。发票日志将只允许我输入100个字符,我相信。E
E1
1.
1.
2.
TFR
E2
1.
1.
2.
1.
3.
02
01
1.
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
01
1.
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
01
1.
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
E2
1.
1.
2.
2.
3.
自动控制
4.
演员
5.
5400
6.
0
7.
1.
8.
1080
9
0
01
1.
这里是网格级别的叙述

只是猜测。但基本上您应该按如下方式更改键:
(使用密钥修复更新)


请回答您的问题,并提供一个演示您的问题的示例。格式化所需的输出,使其格式良好,并删除虚假的
-
字符也很好。我已经编辑并删除了xml中的破折号,但要提供完整的代码需要大量的代码,不确定是否有人能够查看它。没有人对整个代码说任何话。请提供(最低限度的注释)。如果不这样做,将浪费您和我们的时间@例如,hr_117会在他(现在已删除)的答案中猜测和遗漏的时间的一小部分内为您提供答案。Ok再次编辑。不确定这是否足以解释问题。如果没有完整的xsl,这段代码可能无法工作。如果您可以提供一个完整的xslt来显示问题,这会更容易,但这不应该是您的整个产品xslt。只有一个被拒绝的工作可以是30行代码。此代码将对E0和E2后面的所有01进行分组。我只需要将E0后面的01分组。我当前的代码将所有01分组,这正是我试图避免的。这是我目前拥有的,你的钥匙给了我同样的结果。我需要这样的东西,但我不确定AND运算符@R.Gup的正确语法是什么,没有it组所有01都跟在E0或E2后面。因此,E0的键(生成的id)仅保存E0后面的01。E2后面的01具有E2生成的id,Trey it,抱歉,我刚刚尝试了它,它仍然将所有01 followi分组
<xsl:key name="kApproverDetailArray" match="faRecord[recordCode='01']"
         use="generate-id(
              preceding-sibling::faRecord[recordCode='E0' or recordCode='E2'][1])" />
 <xsl:template match="facXML">
    <xsl:for-each select="faRecord[recordCode='E0' ]">
      <xsl:for-each select="key('kApproverDetailArray', generate-id())  ">
         <!-- do something -->
      </xsl:for-each>
  </xsl:for-each>
</xsl:template>