编辑:
感谢您的回复,我现在了解了一些,但似乎无法在更高级的案例中使用它,例如此输入:
<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>
我想从'query1'中获取 id_action 的值,该查询具有/ queryResults / record(在本例中为id_action = 8943)并从下面复制名为“query2”的所有查询除了列[@ name ='id_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次它有值(当存在节点“record”时)。所以我想只在query1有'record'节点时才接受id_action。与此情况类似,8943是有效值。另外,请记住,在id_action中有两个或更多可能值的可能性,所以我想要每个值。
注意2:从query2开始,我想保留与上面的id_action(query1)中的值不同的记录。请注意,query2具有记录1,记录2等
基本上,对于具有queryResults / record的每个'query1',我从该queryResults / record / column [@ name ='id_action']获取值,并从“query2”中复制没有该值的每条记录query2 / queryResults / record / column中的值[@ name ='id_action']
答案 0 :(得分:0)
已根据您的修改
进行了编辑我想从'query1'获取id_action的值 / queryResults / record(在本例中为id_action = 8943)并复制所有 从下面查询名称为“query2”的查询除了具有的查询 列[@ name ='id_action']等于8943。
这是交叉引用的问题,因此最好在 key 的帮助下处理它:
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>