只需要打印特定情况的数据


<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"。请求你帮我解决这个问题。谢谢!

预期输出的格式不太清楚。以下样式表将按原样复制所有内容,但以下情况除外:

  1. action为"删除"的任何account;
  2. 任何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>

相关内容

  • 没有找到相关文章

最新更新