2011-01-17 2 views
3

私は(他のファイルI格納されている)、私は別のもののために変更したいヘッダーといくつかの元のファイルを持っている:xsltで既に存在する値を持つ要素全体を変更するにはどうすればよいですか?

元のファイル:

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

新しいヘッダー(ファイル内):

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

期待される結果:advancの中

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

感謝e!

+1

mhm ..これは問題ではないようです。単純にXSLTを学ぼうとしましたか? ) – bluish

+0

これには「宿題」のタグがあります – Boldewyn

+0

複数の入力ソースを扱う方法を尋ねていますか? –

答えて

1

この変換(デモのみの目的のために新しいヘッダを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文書

名前のファイルになります

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

header文書:本当場合

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

あなたはを持っています:

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

は指名手配、正しい結果を生成します'Header.xml'は、XSLTスタイルシートと同じディレクトリにあります(別のディレクトリにある場合は、それに応じてドキュメントのURLを変更してください)。

実際には、xsl:名前空間ノードはheader要素にコピーされません。標準のXSLT機能document()の使用:

はノートを行います。

+0

+1は私のものより良い答えを持っています:) - あなたは仕事をしなくても済むようにMarcを残しましたが、明らかにそれは楽しいものではありません;) – gef

+0

ありがとうDimitre!私の研究では、document()関数が見つかりましたが、最適な方法であるとは確信できませんでした。私はあなたの答えを+1するのが嫌いですが、私は新しく、十分な評判はありません。 – Marc

+0

は楽しい心配しないでください...私は私のプロジェクトでやるべき仕事がたくさんある...あなたはあなたの助けのためにGEFありがとうございました。 :-) – Marc

1

外部文書を使用する場合は、xslt文書関数を使用する必要があります。

例えば/

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

+1

+1私から。私は個人的には、よいコード例と説明がリンクを提供するだけではなく、少なくともOPとの対話がスムーズに続き、提供された解決策について質問をすることができると考えています。 –

関連する問題