2013-10-14 96 views

回答

2

我沒有測試過很多,因爲您沒有提供樣本,但以下樣式表基於Identity transform可以找到工作。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <!-- Identity transform - copy everything into output --> 
    <xsl:template match="node() | @*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node() | @*" /> 
     </xsl:copy> 
    </xsl:template> 

    <!-- for not-root xs:element ... --> 
    <xsl:template match="xs:element[ancestor::xs:complexType]"> 
     <xsl:copy> 
      <!-- ... add minOccurs element ...--> 
      <xsl:attribute name="minOccurs">0</xsl:attribute> 
      <!-- ... and copy everything but not minOccurs attribute if any --> 
      <xsl:apply-templates select="node() | @*[not(name() = 'minOccurs')]" />  
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
+1

+1。不過你可以在''之前使用''。這樣'@ * [not(name()='minOccurs')]'不再是必需的 - 指定兩次的屬性將覆蓋前一個。 – Tomalak

+0

你說得對 - 謝謝你的提示! –