xslt添加属性

时间:2010-08-03 07:16:46

标签: xslt

我需要添加命名空间,并向某些节点添加属性。有了这个输入:

<root>
  <Node1>test</Node1>
  <DateTo />
</root>

我想要这个输出:

<my:root xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-07-28T07:33:11">
  <my:Node1>test</my:Node1>
  <my:DateTo xsi:nil="true"/>
</my:root>

DateTo节点需要设置此属性。

我使用此转换成功添加了命名空间,但无法添加属性。

<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
    <xsl:template match='*'>
        <xsl:element name='my:{local-name()}' namespace='http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-07-28T07:33:11' >
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>"

我收到此错误“在添加了text,comment,pi或子元素节点之后,无法将属性和命名空间节点添加到父元素。”感谢任何帮助这里。

1 个答案:

答案 0 :(得分:2)

您可以尝试以下操作来插入其他属性:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
                xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
                version='1.0'>
  <xsl:template match='*'>
    <xsl:element name='my:{local-name()}'
                 xmlns:my='http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-07-28T07:33:11'>
      <xsl:if test="not(*) and not(normalize-space())">
        <xsl:attribute name="xsi:nil">
          <xsl:value-of select="true()"/>
        </xsl:attribute>
      </xsl:if>
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>