<PEE>
<PG>
<EMP>
<Summary>
<EMP_ID>1</EMP_ID>
</Summary>
<PE>
<Operation>NONE</Operation>
<AN>100</AN>
</PE>
<PE>
<Operation>REMOVE</Operation>
<AN>200</AN>
</PE>
<PE>
<Operation>ADD</Operation>
<AN>300</AN>
</PE>
</EMP>
<EMP>
<Summary>
<EMP_ID>2</EMP_ID>
</Summary>
<PE>
<Operation>REMOVE</Operation>
<AN>400</AN>
</PE>
<PE>
<Operation>NONE</Operation>
<AN>500</AN>
</PE>
<PE>
<Operation>NONE</Operation>
<AN>600</AN>
</PE>
</EMP>
</PG>
</PEE>
你好@Michael,非常感谢你以前的回答。我在这里给你一个更合适的xml,它是实际xml的一部分。您的理解是正确的,不应在输出中打印“REMOVE”操作,并且只有在相同的“EMP_ID”中至少有一个“ADD”/“MODIFY”子操作时才会打印“NONE”操作。我希望文本输出中有2行,其中第一行应为'1 NONE 100',第二行应为'1 ADD 300'。 请求你帮我解决这个问题。谢谢!
答案 0 :(得分:1)
预期输出的格式不太清楚。以下样式表将按原样复制所有内容,但不包括:
account
为“REMOVE”的任何action
; account
为“无”的任何action
且没有其account
为“已添加”或“修改”的兄弟action
。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="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="account[action='REMOVE' or action='NONE' and not(../account[action='ADD' or action='MODIFY'])]"/>
</xsl:stylesheet>
测试输入
<root>
<emp>
<summary>
<emp_id>1</emp_id>
</summary>
<account>
<action>REMOVE</action>
<value>11</value>
</account>
<account>
<action>NONE</action>
<value>12</value>
</account>
</emp>
<emp>
<summary>
<emp_id>2</emp_id>
</summary>
<account>
<action>REMOVE</action>
<value>21</value>
</account>
<account>
<action>NONE</action>
<value>23</value>
</account>
<account>
<action>ADD</action>
<value>22</value>
</account>
</emp>
<emp>
<summary>
<emp_id>3</emp_id>
</summary>
<account>
<action>REMOVE</action>
<value>31</value>
</account>
<account>
<action>NONE</action>
<value>32</value>
</account>
<account>
<action>MODIFY</action>
<value>33</value>
</account>
</emp>
</root>
<强>结果强>
<root>
<emp>
<summary>
<emp_id>1</emp_id>
</summary>
</emp>
<emp>
<summary>
<emp_id>2</emp_id>
</summary>
<account>
<action>NONE</action>
<value>23</value>
</account>
<account>
<action>ADD</action>
<value>22</value>
</account>
</emp>
<emp>
<summary>
<emp_id>3</emp_id>
</summary>
<account>
<action>NONE</action>
<value>32</value>
</account>
<account>
<action>MODIFY</action>
<value>33</value>
</account>
</emp>
</root>