XSLT1.0。我需要在下面的表达式中选择几个节点并排除其他节点
我需要只包含E0同级的所有01 recordCode节点,但需要忽略E2和E3下的节点,我将使用下面的代码获得所有01,然后是E0。不确定如何创建上面的键,该键只会导致一个节点的所有01只跟在E0后面。 这是我当前的xsltXSLT1.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
<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>