<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的一部分。您的理解是正确的,即不应在输出中打印"删除"操作,并且仅当同一"EMP_ID"至少有一个"添加"/"修改"子操作时,才会打印"NONE"操作。我期待文本输出中有 2 行,其中第一行应该是"1 NONE 100",第二行应该是"1 ADD 300"。请求你帮我解决这个问题。谢谢!
预期输出的格式不太清楚。以下样式表将按原样复制所有内容,但以下情况除外:
action
为"删除"的任何account
;- 任何
action
为"无"且没有action
为"添加"或"修改"的同级account
account
。
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>