Добавить префикс NS0 только в корневой узел - PullRequest
0 голосов
/ 26 октября 2018

Hy Guys,

Пожалуйста, помогите мне!Мне нужно включить префикс пространства имен только в первый узел XML, остальные узлы должны быть без префикса и пространства имен.См. Пример ниже.

До:

<RootNode xmlns="https://xxx/yyy/v1">
<CreatedBy>admin</CreatedBy>
<Task>
<Number>1</Number>
<Status>-1</Status>
<Name>Fechada</Name>
</Task>
</RootNode>

После:

<ns0:RootNode xmlns:ns0="https://xxx/yyy/v1">
<CreatedBy>admin</CreatedBy>
<Task>
<Number>1</Number>
<Status>-1</Status>
<Name>Fechada</Name>
</Task>
</ns0:RootNode>

Как мне это сделать с помощью XSL?

1 Ответ

0 голосов
/ 26 октября 2018

У вас есть две вещи, которые вы хотите здесь сделать.

1) Добавьте префикс пространства имен к корневому элементу.Это можно сделать с помощью следующего шаблона

<xsl:template match="/*">
  <xsl:element name="ns0:{local-name()}" namespace="{namespace-uri()}">
    <xsl:apply-templates select="@*|node()" />
  </xsl:element>
</xsl:template>

2) Для всех других элементов создайте элементы с тем же именем, но без пространства имен.Это можно сделать с помощью следующего

  <xsl:template match="*/*">
    <xsl:element name="{local-name()}">
      <xsl:apply-templates select="@*|node()" />
    </xsl:element>
  </xsl:template>

Объединение всего этого вместе с шаблоном идентификации для обработки всего остального дает вам следующий XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" indent="yes" html-version="5"/>

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

  <xsl:template match="/*">
    <xsl:element name="ns0:{local-name()}" namespace="{namespace-uri()}">
      <xsl:apply-templates select="@*|node()" />
    </xsl:element>
  </xsl:template>

  <xsl:template match="*/*">
    <xsl:element name="{local-name()}">
      <xsl:apply-templates select="@*|node()" />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>
...