如何使用XSLT将元素作为第n条记录插入
考虑以下输入:如何使用XSLT将元素作为第n条记录插入,xslt,soa,Xslt,Soa,考虑以下输入: <SettleList> <SettleObject> <ExternalVar>5</ExternalVar> </SettleObject> <SettleObject> <ExternalVar>10</ExternalVar> </SettleObject> </SettleList> 5. 10 现在的要求是:除第5和第10条之外的所
<SettleList>
<SettleObject>
<ExternalVar>5</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>10</ExternalVar>
</SettleObject>
</SettleList>
5.
10
现在的要求是:除第5和第10条之外的所有记录都必须为零,而第5和第10条将包含值。
prob使用的是apply模板,对于第二个对象,无法发送任何参数,因此索引再次从1开始,而不是从第6条记录开始
我正在使用XSLT尝试这一点,您的XML一开始似乎格式不正确。我不明白为什么一个简单的递归模板不能做到这一点 在我的示例中,我使用了输入数据:
<SettleList>
<SettleObject>
<ExternalVar>3</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>5</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>10</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>14</ExternalVar>
</SettleObject>
</SettleList>
3.
5.
10
14
运行此脚本时:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="SettleObject[ExternalVar=5]">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="SettleObject[ExternalVar=10]">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="SettleObject">
<SettleObject>
<ExternalVar>0</ExternalVar>
</SettleObject>
</xsl:template>
0
我得到这个输出:
<SettleList>
<SettleObject>
<ExternalVar>0</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>5</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>10</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>0</ExternalVar>
</SettleObject>
</SettleList>
0
5.
10
0
这是您想要的输出吗?您的XML一开始似乎格式不正确。我不明白为什么一个简单的递归模板不能做到这一点 在我的示例中,我使用了输入数据:
<SettleList>
<SettleObject>
<ExternalVar>3</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>5</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>10</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>14</ExternalVar>
</SettleObject>
</SettleList>
3.
5.
10
14
运行此脚本时:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="SettleObject[ExternalVar=5]">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="SettleObject[ExternalVar=10]">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="SettleObject">
<SettleObject>
<ExternalVar>0</ExternalVar>
</SettleObject>
</xsl:template>
0
我得到这个输出:
<SettleList>
<SettleObject>
<ExternalVar>0</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>5</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>10</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>0</ExternalVar>
</SettleObject>
</SettleList>
0
5.
10
0
这是您想要的输出吗?您没有指定XSLT版本,所以我使用了版本2.0 该解决方案基于(例如)5个连续的沉降对象标记的分组 然后插入一个额外的标签 在这里,在当前组之后,我输出一个ExtraObject标记(示例 在上一组之后应添加的内容)
额外对象#
在XSLT1.0中,可以使用Muenchian groupng实现另一种解决方案。
请参见您自己的示例(即使在stackoverflow上)。您没有指定XSLT版本,因此我使用了2.0版 该解决方案基于(例如)5个连续的沉降对象标记的分组 然后插入一个额外的标签 在这里,在当前组之后,我输出一个ExtraObject标记(示例 在上一组之后应添加的内容)
额外对象#
在XSLT1.0中,可以使用Muenchian groupng实现另一种解决方案。
请参见您自己的示例(即使在stackoverflow上)。保持简单
输入:
<SettleList xmlns="http://xmlns.oracle.com/TestApp/TestAppComposite/BPELProcess1">
<SettleObject>
<ExternalVar>1</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>2</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>3</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>4</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>5</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>6</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>7</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>8</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>9</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>10</ExternalVar>
</SettleObject>
</SettleList>
1.
2.
3.
4.
5.
6.
7.
8.
9
10
XSL:
0
输出:
<?xml version = '1.0' encoding = 'UTF-8'?>
<ns0:SettleList xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns0="http://xmlns.oracle.com/TestApp/TestAppComposite/BPELProcess1">
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>5</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>10</ns0:ExternalVar>
</ns0:SettleObject>
</ns0:SettleList>
0
0
0
0
5.
0
0
0
0
10
保持简单
输入:
<SettleList xmlns="http://xmlns.oracle.com/TestApp/TestAppComposite/BPELProcess1">
<SettleObject>
<ExternalVar>1</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>2</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>3</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>4</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>5</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>6</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>7</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>8</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>9</ExternalVar>
</SettleObject>
<SettleObject>
<ExternalVar>10</ExternalVar>
</SettleObject>
</SettleList>
1.
2.
3.
4.
5.
6.
7.
8.
9
10
XSL:
0
输出:
<?xml version = '1.0' encoding = 'UTF-8'?>
<ns0:SettleList xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns0="http://xmlns.oracle.com/TestApp/TestAppComposite/BPELProcess1">
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>5</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>0</ns0:ExternalVar>
</ns0:SettleObject>
<ns0:SettleObject>
<ns0:ExternalVar>10</ns0:ExternalVar>
</ns0:SettleObject>
</ns0:SettleList>
0
0
0
0
5.
0
0
0
0
10
这太快了。非常感谢你。所需的输出最多为第五条记录,即所有外部变量都为“0”,然后从第六条到第十条以及“0”。我输入了多达100条记录,需要在所有不可用的标记之间插入“0”。如果我没有误解您,此脚本将生成该输出。如果我错了,请在你的问题中添加所需的输出。谢谢你的帮助。你能告诉我“@*|node()”是做什么的吗。很抱歉,我对xslt编码还不太熟悉。那太快了。非常感谢你。所需的输出最多为第五条记录,即所有外部变量都为“0”,然后从第六条到第十条以及“0”。我输入了多达100条记录,需要在所有不可用的标记之间插入“0”。如果我没有误解您,此脚本将生成该输出。如果我错了,请在你的问题中添加所需的输出。谢谢你的帮助。你能告诉我“@*|node()”是做什么的吗。很抱歉,我对xslt编码相当陌生。非常感谢Valdi_-Bo。我正在研究你的解决办法。我正在使用XSLT版本1.0。谢谢Valdi_-bo。老实说,你的代码让我觉得我对XSLT一无所知:(.我还没有使用过2.0,而且对于每个小组来说都是新的。我会尝试理解你的代码。非常感谢Valdi_-Bo。我正在研究你的解决方案。我正在使用XSLT版本1.0。感谢Valdi_-Bo。老实说,你的代码让我觉得我对XSLT一无所知:(.我没有使用过2.0,对于每个组,我都是新手。我会尝试理解您的代码。您的问题不清楚。您有两个记录,有两个值(或者更确切地说,如果您的XML格式正确,您会有)。是否要在每个现有记录之前插入4个空记录?还是要将现有记录的值归零?请澄清并发布更广泛的示例,包括预期的输出。是的,Michael。我已使用格式良好的xml更新了代码。对于所需的ExternalVar的每个值,需要创建特定记录钕铼