2011-03-21 69 views
0

我有这样的XML文档如下:复制XML文档与除元素的黑色列表中的所有元素

<root> 
    <record> 
     <element1>value1</element1> 
     <element2>value2</element2> 
     <element3>value3</element3> 
     <element4>value4</element4> 
     <element5>value5</element5> 
     <repeatingelement1>value 1.1</repeatingelement1> 
     <repeatingelement1>value 1.2</repeatingelement1> 
     <repeatingelement1>value 1.3</repeatingelement1> 
     <repeatingelement2>value 2.1</repeatingelement2> 
     <repeatingelement2>value 2.2</repeatingelement2> 
     <repeatingelement2>value 2.3</repeatingelement2> 
    </record> 
    <record> 
     <element1>a</element1> 
     <element2>b</element2> 
     <element3>c</element3> 
     <element4>d</element4> 
     <element5>e</element5> 
     <repeatingelement1>a 1.1</repeatingelement1> 
     <repeatingelement1>a 1.2</repeatingelement1> 
     <repeatingelement1>a 1.3</repeatingelement1> 
     <repeatingelement2>b 2.1</repeatingelement2> 
     <repeatingelement2>b 2.2</repeatingelement2> 
     <repeatingelement2>b 2.3</repeatingelement2> 
    </record> 
    <record> 
     <element1>value1</element1> 
     <element2>value2</element2> 
     <element3>value3</element3> 
     <element4>value4</element4> 
     <element5>value5</element5> 
     <repeatingelement1>value 1.1</repeatingelement1> 
     <repeatingelement1>value 1.2</repeatingelement1> 
     <repeatingelement1>value 1.3</repeatingelement1> 
     <repeatingelement2>value 2.1</repeatingelement2> 
     <repeatingelement2>value 2.2</repeatingelement2> 
     <repeatingelement2>value 2.3</repeatingelement2> 
    </record> 
</root> 

我希望能够获得XML的一个副本,而不要素说的黑名单没有element3repeatingelement2

E.g.输出将是:

<root> 
    <record> 
     <element1>value1</element1> 
     <element2>value2</element2> 
     <element4>value4</element4> 
     <element5>value5</element5> 
     <repeatingelement1>value 1.1</repeatingelement1> 
     <repeatingelement1>value 1.2</repeatingelement1> 
     <repeatingelement1>value 1.3</repeatingelement1> 
    </record> 
    <record> 
     <element1>a</element1> 
     <element2>b</element2> 
     <element4>d</element4> 
     <element5>e</element5> 
     <repeatingelement1>a 1.1</repeatingelement1> 
     <repeatingelement1>a 1.2</repeatingelement1> 
     <repeatingelement1>a 1.3</repeatingelement1> 
    </record> 
    <record> 
     <element1>value1</element1> 
     <element2>value2</element2> 
     <element4>value4</element4> 
     <element5>value5</element5> 
     <repeatingelement1>value 1.1</repeatingelement1> 
     <repeatingelement1>value 1.2</repeatingelement1> 
     <repeatingelement1>value 1.3</repeatingelement1> 
    </record> 
</root> 

有没有人有这个版本1.0的理想的Xsl?我能想到的唯一办法就是写出所有元素的XSLT,并将XSL替换为我不想要的元素。

+1

这需要有某种常见问题 - 你是第二个人来问这个问题今天* * :) – 2011-03-21 14:15:27

+0

我有一个很好的扫描,通过询问..很多类似的问题之前。但不完全是我想要的...... – CraftyFella 2011-03-21 16:14:40

回答

6

这非常容易;只需创建一个包含标识模板的样式表,然后替换您想要删除的元素并且不输出。就像这样:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="element3|repeatingelement2" /> 

    <xsl:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
+0

优秀。谢谢 – CraftyFella 2011-03-21 14:11:51