当前位置: 首页 > 知识库问答 >
问题:

XSLT复制除包含变量值的节点之外的所有内容

墨财
2023-03-14

编辑:

谢谢你的回复,我现在明白了一点,但似乎不能在像这样的输入更先进的情况下工作:

      <root>
      <output>               
                        <query name="query1">
                            <parameters>
                                <parameter name="id_action">8947</parameter>
                            </parameters>
                            <queryResults/>                     
                        </query>
                        <query name="query1">
                            <parameters>
                                <parameter name="id_action">8943</parameter>
                            </parameters>
                            <queryResults>
                                <record id="1">
                                    <column name="id_action">8943</column>
                                    <column name="Actname">testing</column>
                                </record>
                            </queryResults>
                            <queryErrors/>
                        </query>
                        <query name="query1">
                            <parameters>
                                <parameter name="id_action">1571</parameter>
                            </parameters>
                            <queryResults/>                      
                        </query>                
                </output>       
                <output2>                
                        <query name="query2">
                            <parameters>
                                <parameter name="id">1</parameter>
                            </parameters>
                            <queryResults>
                                <record id="1">
                                     <column name="DepName">West</column>
                                    <column name="id_action">8947</column>
                                </record>
                                <record id="2">
                                    <column name="DepName">West</column>
                                    <column name="id_action">8943</column>
                                </record>
                                <record id="3">
                                    <column name="DepName">East</column>
                                    <column name="id_action">1571</column>
                                </record>
                            </queryResults>                      
                        </query>                    
                </output2>

<root>

我想从具有/queryResults/record的“query1”中获取id\u action的值(在本例中,id\u action=8943),并从下面复制所有名为“query2”的查询,除了列[@name='id\u action']等于8943的查询。

期望输出:

<root>
    <output2>
       <query name="query2">
                                <parameters>
                                    <parameter name="id">1</parameter>
                                </parameters>
                                <queryResults>
                                    <record id="1">
                                         <column name="DepName">West</column>
                                        <column name="id_action">8947</column>
                                    </record>

                                    <record id="3">
                                        <column name="DepName">East</column>
                                        <column name="id_action">1571</column>
                                    </record>
                                </queryResults>                      
                            </query>        

     </output2>
<root>

EDIT2:注意:query1是一个被多次调用的查询,在上面的例子中是3次,但只有1次它有值(当存在节点“记录”时)。所以我想id_action只有当query1有“记录”节点时。就像在这种情况下,8943是一个有效的值。此外,请记住,id_action可能有2个或更多可能的值,所以我想要这些值中的每一个。

注2:在query2中,我希望保留与上面id\u操作(query1)中的值不同的记录。注意,query2有记录1、记录2等。

基本上,对于每个具有queryResults/record的“query1”,我从queryResults/record/column[@name='id\u action')中获取值,并从“query2”中复制每个在query2/queryResults/record/column[@name='id\u action'中没有该值的记录

共有1个答案

子车征
2023-03-14

根据您的编辑进行编辑

我想从具有/queryResults/record的“query1”中获取id\u action的值(在本例中,id\u action=8943),并从下面复制所有名为“query2”的查询,除了列[@name='id\u action']等于8943的查询。

这是一个交叉引用的问题,因此最好用钥匙来处理:

XSLT 1.0

<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:strip-space elements="*"/>

<xsl:key name="k" match="output/query[queryResults/record]" use="parameters/parameter[@name='id_action']" />

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<!-- suppress the first output branch -->
<xsl:template match="output"/>

<!-- suppress records that have a matching entry in the other branch -->
<xsl:template match="record[key('k', column[@name='id_action'])]"/>

</xsl:stylesheet> 
 类似资料:
  • 我正在寻找下面输入和输出XML的XSLT(1.0)代码。 在输出XML中,C6元素下可以有任何子节点。在下面的XML中,我放了CN元素,但它可以是任何名称。 输入XML- 所需的输出XML- 先谢谢你。

  • 您能帮助我使用xslt实现以下预期输出吗。 输入 预期输出

  • 我认为主要的问题是如何编写exeption表达式来去除输出结果中的“S-3”和“Z”属性。但是怎么做呢? 源代码 期望输出 我的xslt代码(S-3和Z属性仍然存在,但不应该)https://xsltfiddle.liberty-development.net/3NSTbfj/1 我会感激任何解决办法

  • 我需要将子元素复制到父元素中。 输入 期望输出 我尝试的内容(输出与输入保持相同): 我肯定会错过一些非常简单的事情。子元素与父元素具有相同的名称,这应该不是问题?

  • 我已经创建了一个XSLT,我想知道如何在一组标记之间复制所有节点,并在底部添加另一个标记。我创建了XSLT,它具有确定要添加哪个标记以及应该调用什么的所有逻辑。然而,我现在遇到的问题是,我不能复制所有其他标签了。以下是有关文件: XSLT 输入 电流输出 期望的产出

  • 我想从父节点复制到子节点。我真的不确定这是如何实现的。 我的源xml 我想得到输出为 我想要XSLT1.0中的解决方案。 我想将这些节点复制到子节点 谢谢。