xslt добавить атрибут - PullRequest
       2

xslt добавить атрибут

2 голосов
/ 03 августа 2010

Мне нужно добавить пространство имен и добавить атрибут для определенных узлов. С этим входом:

<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>"

Я получаю эту ошибку "Узлы атрибута и пространства имен не могут быть добавлены к родительскому элементу после того, как узел текста, комментария, pi или узла подэлемента уже добавлен." .

1 Ответ

2 голосов
/ 03 августа 2010

Вы можете попробовать следующее, чтобы вставить дополнительный атрибут:

<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...