从xml中删除多个节点

时间:2019-05-24 12:54:41

标签: xml

我没有创建xslt转换器的经验。请有人可以帮助我转换波纹管xml吗?

<Top>
   <cod>a<cod>
   <types>
       <type> 
           <start>2018-05-24</start>
           <end>2019-01-24</end>
           <empl>Ext</empl> 
       <type>
       <type> 
           <start>2019-01-25</start>
           <end>9999-12-31</end>
           <empl>Int</empl> 
       <type>  
   </types>
   <lent>10</lent> 
   <tree>asd</tree> 
</Top>

我需要对其进行转换以仅获取最新的empl类型;

<Top>
    <cod>a<cod>
    <empl>Int</empl> 
    <lent>10</lent> 
   <tree>asd</tree> 
</Top>

1 个答案:

答案 0 :(得分:0)

首先,请确保您的XML是格式正确的,如下所示:

<Top>
   <cod>a</cod>
   <types>
       <type> 
           <start>2018-05-24</start>
           <end>2019-01-24</end>
           <empl>Ext</empl> 
       </type>
       <type> 
           <start>2019-01-25</start>
           <end>9999-12-31</end>
           <empl>Int</empl> 
       </type>  
   </types>
   <lent>10</lent> 
   <tree>asd</tree> 
</Top>

然后将 identity模板copy-of模板简单组合:

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

    <!-- identity template - copies all nodes -->
    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*" />
      </xsl:copy>
    </xsl:template>  

    <!-- Remove 'types' element and its children except for one 'empl' node -->
    <xsl:template match="types">
        <xsl:copy-of select="type[2]/empl" />
    </xsl:template>

</xsl:stylesheet>

如果要复制两个<empl>元素,请从表达式中删除[2]

其输出为:

<Top>
    <cod>a</cod>
    <empl>Int</empl>
    <lent>10</lent>
    <tree>asd</tree>
</Top>