удалить пространство имен для определенного элемента - PullRequest
3 голосов
/ 08 декабря 2010

Есть ли способ удалить пространство имен для определенного элемента?

Ответы [ 2 ]

7 голосов
/ 08 декабря 2010

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:x="my:x">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

 <xsl:template match="x:*">
  <xsl:element name="{local-name()}">
    <xsl:copy-of select="namespace::*[not(. = namespace-uri(..))]"/>
    <xsl:apply-templates select="node()|@*"/>
  </xsl:element>
 </xsl:template>
</xsl:stylesheet>

удаляет любой элемент из пространства имен "my:x" и помещает его в «пространство имен без».

Например, при применении к следующему документу XML:

<t>
  <x:a  xmlns:x="my:x"/>
</t>

желаемый, правильный результат получается :

<t>
   <a/>
</t>

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

0 голосов
/ 08 декабря 2010

Ваш вывод XSLT является новым объектом (узлом или текстом), и вы можете скопировать или преобразовать каждый элемент в новый без пространства имен. Предположим, ваш ввод использует пространство имен "http://www.foo/". Вы создаете элементы с одинаковыми именами (и, возможно, одинаковыми дочерними элементами) без пространства имен.

<xsl:stylesheet xmnls:h="http://www.foo/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<!-- other elements and root omitted -->

    <xsl:template match="h:table">
      <table>
        <!-- copy or transform attributes and children -->
      </table>
    </xsl:table>

</xsl:stylesheet>

создаст новый узел с пространством имен по умолчанию, для которого не требуется префикс, и я думаю, это то, что вам нужно. [Могут быть более элегантные способы использования xsl: copy ... -

ОБНОВЛЕНИЕ: ... и @Dmitri показал их!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...