代码之家  ›  专栏  ›  技术社区  ›  Jeff

从XML中删减值的最简单方法是什么

  •  0
  • Jeff  · 技术社区  · 14 年前

    我有一个XML文档,其中有不同级别的附加节点,我想通过XSLT删除这些节点。

    我的直觉是生成一个XSD(使用Altova等),删除我不想在输出中出现的元素,然后让编辑器(Altova等)自动生成一个XSLT,将旧的XSD转换成新的XSD。

    我最后想到了这个,很简单,所以谢谢你的建议:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" >
    <xsl:output method="xml" indent="yes"/>
    
      <xsl:template xpath-default-namespace="http://www.tempuri.org" match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>
    
      <xsl:template xpath-default-namespace="http://www.tempuri.org" match="SomeNode">
      </xsl:template>
      <xsl:template xpath-default-namespace="http://www.tempuri.org" match="TheNode[@type!='SomeType' and @type!='OtherType']">
      </xsl:template>
    
    </xsl:stylesheet>
    

    我还需要做的一件事是检查“TheNode”中缺少的元素“SomeSubElement”,如果缺少则插入一个空元素。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Jim Garrison    14 年前

    一个简单的标识转换,包含要丢弃的空模板:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      version="2.0">
    
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>
    
      <xsl:template match="tagToBeRemoved"/>
    
    </xsl:stylesheet>