Как изменить целый элемент с уже существующим значением с помощью xslt? - PullRequest
3 голосов
/ 17 января 2011

У меня есть оригинальный файл с заголовком, который я хочу изменить на другой (сохраненный в другом файле):

оригинальный файл:

<doc1>
    <header>
        <a>aaaa</a>
        <b>bbbb</b>
    </header>
    <content>
      <z>zzzzzzzzzzzzz</z>
    </content>
</doc1>

новый заголовок (в файле):

<header>
    <c>cccc</c>
</header>

ожидаемый результат:

    <doc1>
    <header>
        <c>cccc</c>
    </header>
    <content>
      <z>zzzzzzzzzzzzz</z>
    </content>
</doc1>

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 17 января 2011

Это преобразование (для демонстрационных целей новый заголовок встроен в таблицу стилей XSLT):

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

 <my:header>
   <header>
    <c>cccc</c>
   </header>
 </my:header>

 <xsl:variable name="vHeaderDoc" select="document('')/*/my:header"/>
    <xsl:template match="node()|@*">
      <xsl:copy>
         <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>

    <xsl:template match="header">
     <xsl:copy-of select="$vHeaderDoc/*"/>
    </xsl:template>
</xsl:stylesheet>

при применении к предоставленному документу XML :

<doc1>
    <header>
        <a>aaaa</a>
        <b>bbbb</b>
    </header>
    <content>
        <z>zzzzzzzzzzzzz</z>
    </content>
</doc1>

дает желаемый, правильный результат :

<doc1>
    <header xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my:my">
    <c>cccc</c>
   </header>
    <content>
        <z>zzzzzzzzzzzzz</z>
    </content>
</doc1>

В случае real у вас будет :

 <xsl:variable name="vHeaderDoc" select="document('Header.xml')"/>

и документ header будет находиться в файле с именем 'Header.xml', который находится в том же каталоге, что и таблица стилей XSLT (если он находится в другом каталоге, измените URL документа соответствующим образом).

В реальном случае, узел пространства имен xsl: не будет скопирован на элемент header.

Примечание : использование стандартной функции XSLT document().

1 голос
/ 17 января 2011

Если вы хотите использовать внешний документ, вам нужно использовать функцию документа xslt.

например /

http://www.ibm.com/developerworks/xml/library/x-tipcombxslt/ http://www.xml.com/pub/a/2002/03/06/xslt.html

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