XSLT базируются пространство имен тега вместо пространства имен атрибута элемента

Установить на навигацию

style="position:fixed; width:100%;"
7
задан Pieter VDE 5 June 2013 в 08:06
поделиться

2 ответа

Вам необходимо вставить узел пространства имен в элемент документа вашего результирующего дерева. Это можно сделать несколькими способами, в зависимости от того, используете ли вы XSLT 1.0 или 2.0. Ниже приводится решение версии 2.0. Я предполагаю, что вы выполняете преобразование измененного идентификатора во входном документе (в вашем вопросе на самом деле не указано):

<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <!-- special rule for the document element -->
  <xsl:template match="/*">
    <xsl:copy>
      <!-- Add a namespace node -->
      <xsl:namespace name="mynamespace" select="'somenamespace'"/>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

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

  <!-- the rest of your rules -->

</xsl:stylesheet>

Для полного охвата всех различных методов управления пространствами имен в выходном документе ознакомьтесь с Раздел «Недостаточно пространств имен» статьи «Пространства имен в XSLT» на моем веб-сайте.

8
ответ дан 7 December 2019 в 03:20
поделиться

Возможно, я неправильно понял вопрос, но я думаю, вам следует сделать следующее:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="somenamespace"
    version="2.0">

<xsl:output method="xml" omit-xml-declaration="no" standalone="yes"  indent="yes"/>

<xsl:template match="myMatchedNode">
  <tag>Some text i want inserted into the xsl</mynamespace>

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

</xsl:stylesheet>

Это должно позволить вам использовать теги пространства имен в качестве пространства имен по умолчанию, и в выходном документе они будут по умолчанию пространство имен. Ваш входной документ может по-прежнему использовать неприятный синтаксис mynamespace: tag.

Вы также можете попробовать сделать это:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="somenamespace"
    xmlns:mynamespace="somenamespace"
    version="2.0">

Я не совсем уверен, что заменит mynamespace: tag только на тег, и если это так, он может зависеть от реализации.

1
ответ дан 7 December 2019 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: