2012-04-01 17 views
1

の概念に関する質問です。XMLファイルの継承と値の変更

私はのはベースそれを呼びましょう、XMLファイルを持っている:

<base id="default"> 
    <tags> 
     <tag>tag_one</tag> 
     <tag>tag_two</tag> 
     <tag>tag_three</tag> 
    </tags> 
    <data> 
     <data_a>blue</data_a> 
     <data_b>3</data_b> 
    </data> 
</base> 

私が何をしたいのかは個々のプロパティを変更し、別のファイルににこのXMLを拡張にできるようにすることです。例えば、私はそのファイルを継承し、異なるdata/data_aノードで新しいものを作りたい:

<base id="green" import="default"> 
    <data> 
     <data_a>green</data_a> 
    </data> 
</base> 

これまでのところ、それは非常に単純ですが、それは新しいものと古いdata/data_aを置き換えます。私はさらに新しいノードを追加することができます:

<base id="ext" import="default"> 
    <moredata> 
     <data>extended version</data> 
    </moredata> 
</base> 

それでもかなり簡単です。問題は、XMLリスト(ノードのようにtagsのように)を削除したいときです。

リストの特定のインデックスはどのように参照する必要がありますか?

<base id="diffList" import="default"> 
    <tags> 
     <tag index="1">this is not anymore tag_two</tag> 
    </tags> 
</base> 

とノード/配列インデックスを削除するため:私が何かやって考えていた

<base id="deleting" import="default"> 
    <tags> 
     <tag index="2"/> 
    </tags> 
    <data/> 
</base> 

<!-- This will result in an XML containing these values: --> 

<base> 
    <tag>tag_one</tag> 
    <tag>tag_two</tag> 
</base> 

をしかし、私は、私の解決策に満足していませんよ。私はXSLTやその他のXML変換ツールについては何も知らないが、誰かがこれを前にしていたに違いないと思う。私が探している

キー目標は、(ベースと両方がを「拡張」)手でXMLを書くことが容易です。

私は、XML以外の新しいソリューションを手に入れるのは簡単です。

読んでいただきありがとうございます。

答えて

1

以下はご案内します。 XSLTはあるXMLを別のXMLに変換する可能性があります。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

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

    <xsl:template match="data_a"> 
     <data_a>green</data_a> 
    </xsl:template> 

    <xsl:template match="tags/tag[1]"/> 

</xsl:stylesheet> 

上記3つのテンプレートの説明:
(1)すべてのノードをコピーし、属性
(2)が、DATA_Aノードを変更
(3)内の最初のタグ要素のため何もしない(任意)タグ要素。

これは、XMLの変換に役立ちます。