尝试从XML删除完整记录,但仅删除某些字段

问题描述

我正尝试过滤出团队规模不大于4的记录。

XML输入是

<EmpJob>
    <EmpJob>
      <emplStatus>4530</emplStatus>
      <userNav>
        <User>
          <firstName>User</firstName>
          <lastName>One</lastName>
          <hireDate>2015-05-01T00:00:00.000</hireDate>
          <gender>M</gender>
          <teamMembeRSSize>9</teamMembeRSSize>
          <totalTeamSize>27</totalTeamSize>
        </User>
      </userNav>
      <businessUnit>CORP</businessUnit>
      <jobTitle>Global IT Manager</jobTitle>
      <jobCode>IT1IT02</jobCode>
      <employmentNav>
        <EmpEmployment>
          <userNav>
            <User>
              <teamMembeRSSize>9</teamMembeRSSize>
              <totalTeamSize>27</totalTeamSize>
              <email>hris@user.com</email>
            </User>
          </userNav>
          <startDate>2015-05-01T00:00:00.000</startDate>
        </EmpEmployment>
      </employmentNav>
      <managerId>101112</managerId>
      <userId>200254</userId>
      <eventReason>DATAMIG</eventReason>
      <regularTempNav>
        <PicklistOption>
          <externalCode>R</externalCode>
          <localeLabel>Regular</localeLabel>
        </PicklistOption>
      </regularTempNav>
      <positionEntryDate>2019-04-19T00:00:00.000</positionEntryDate>
      <positionNav>
        <Position>
          <externalName_defaultValue>Gl IT Service Delivery Mgr</externalName_defaultValue>
        </Position>
      </positionNav>
      <eventReasonNav/>
      <company>C001</company>
      <location>bedROGENBOS</location>
      <position>POS2000143</position>
      <department>IT</department>
      <event>983</event>
      <companyNav>
        <FOCompany>
          <countryNav>
            <Territory>
              <territoryName>Belgium</territoryName>
            </Territory>
          </countryNav>
        </FOCompany>
      </companyNav>
    </EmpJob>
    <EmpJob>
      <emplStatus>4530</emplStatus>
      <userNav>
        <User>
          <firstName>User</firstName>
          <lastName>Two</lastName>
          <hireDate>2016-09-13T00:00:00.000</hireDate>
          <gender>M</gender>
          <teamMembeRSSize>1</teamMembeRSSize>
          <totalTeamSize>1</totalTeamSize>
        </User>
      </userNav>
      <businessUnit>CORP</businessUnit>
      <jobTitle>Sourcing Manager</jobTitle>
      <jobCode>PR4SM01</jobCode>
      <employmentNav>
        <EmpEmployment>
          <userNav>
            <User>
              <teamMembeRSSize>1</teamMembeRSSize>
              <totalTeamSize>1</totalTeamSize>
              <email>hris@user.com</email>
            </User>
          </userNav>
          <startDate>2016-09-13T00:00:00.000</startDate>
        </EmpEmployment>
      </employmentNav>
      <managerId>105389</managerId>
      <userId>202347</userId>
      <eventReason>DATAMIG</eventReason>
      <regularTempNav>
        <PicklistOption>
          <externalCode>R</externalCode>
          <localeLabel>Regular</localeLabel>
        </PicklistOption>
      </regularTempNav>
      <positionEntryDate>2019-04-19T00:00:00.000</positionEntryDate>
      <positionNav>
        <Position>
          <externalName_defaultValue>Procurement Mgr AO</externalName_defaultValue>
        </Position>
      </positionNav>
      <eventReasonNav/>
      <company>C622</company>
      <location>AUBOTANY</location>
      <position>POS2000577</position>
      <department>PROCUREMENT</department>
      <event>983</event>
      <companyNav>
        <FOCompany>
          <countryNav>
            <Territory>
              <territoryName>Australia</territoryName>
            </Territory>
          </countryNav>
        </FOCompany>
      </companyNav>
    </EmpJob>
  </EmpJob>

正在使用的样式表是

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>


 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>
 
 <xsl:template match="EmpJob/EmpJob/userNav/User[(teamMembeRSSize/text()=('3','2','1','0'))]"/>
 

</xsl:stylesheet>

结果是某些字段(例如名字,姓氏,团队成员大小)为空,但记录仍保留。输出XML是

<?xml version="1.0" encoding="UTF-8"?>
<EmpJob>
   <EmpJob>
      <emplStatus>4530</emplStatus>
      <userNav>
         <User>
            <firstName>User</firstName>
            <lastName>One</lastName>
            <hireDate>2015-05-01T00:00:00.000</hireDate>
            <gender>M</gender>
            <teamMembeRSSize>9</teamMembeRSSize>
            <totalTeamSize>27</totalTeamSize>
         </User>
      </userNav>
      <businessUnit>CORP</businessUnit>
      <jobTitle>Global IT Manager</jobTitle>
      <jobCode>IT1IT02</jobCode>
      <employmentNav>
         <EmpEmployment>
            <userNav>
               <User>
                  <teamMembeRSSize>9</teamMembeRSSize>
                  <totalTeamSize>27</totalTeamSize>
                  <email>hris@user.com</email>
               </User>
            </userNav>
            <startDate>2015-05-01T00:00:00.000</startDate>
         </EmpEmployment>
      </employmentNav>
      <managerId>101112</managerId>
      <userId>200254</userId>
      <eventReason>DATAMIG</eventReason>
      <regularTempNav>
         <PicklistOption>
            <externalCode>R</externalCode>
            <localeLabel>Regular</localeLabel>
         </PicklistOption>
      </regularTempNav>
      <positionEntryDate>2019-04-19T00:00:00.000</positionEntryDate>
      <positionNav>
         <Position>
            <externalName_defaultValue>Delivery Mgr</externalName_defaultValue>
         </Position>
      </positionNav>
      <eventReasonNav/>
      <company>C001</company>
      <location>bedROGENBOS</location>
      <position>POS2000143</position>
      <department>IT</department>
      <event>983</event>
      <companyNav>
         <FOCompany>
            <countryNav>
               <Territory>
                  <territoryName>Belgium</territoryName>
               </Territory>
            </countryNav>
         </FOCompany>
      </companyNav>
   </EmpJob>
   <EmpJob>
      <emplStatus>4530</emplStatus>
      <userNav/>
      <businessUnit>CORP</businessUnit>
      <jobTitle>Sourcing Manager</jobTitle>
      <jobCode>PR4SM01</jobCode>
      <employmentNav>
         <EmpEmployment>
            <userNav>
               <User>
                  <teamMembeRSSize>1</teamMembeRSSize>
                  <totalTeamSize>1</totalTeamSize>
                  <email>hris@user.com</email>
               </User>
            </userNav>
            <startDate>2016-09-13T00:00:00.000</startDate>
         </EmpEmployment>
      </employmentNav>
      <managerId>105389</managerId>
      <userId>202347</userId>
      <eventReason>DATAMIG</eventReason>
      <regularTempNav>
         <PicklistOption>
            <externalCode>R</externalCode>
            <localeLabel>Regular</localeLabel>
         </PicklistOption>
      </regularTempNav>
      <positionEntryDate>2019-04-19T00:00:00.000</positionEntryDate>
      <positionNav>
         <Position>
            <externalName_defaultValue>Procurement Mgr AO</externalName_defaultValue>
         </Position>
      </positionNav>
      <eventReasonNav/>
      <company>C622</company>
      <location>AUBOTANY</location>
      <position>POS2000577</position>
      <department>PROCUREMENT</department>
      <event>983</event>
      <companyNav>
         <FOCompany>
            <countryNav>
               <Territory>
                  <territoryName>Australia</territoryName>
               </Territory>
            </countryNav>
         </FOCompany>
      </companyNav>
   </EmpJob>
</EmpJob>

输出中应该只有第一位员工。关于如何从输出删除整个记录的任何建议。

谢谢 杰里米

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)