2011-07-20 4 views
0

私はXML変換でいくつかの助けをすることができました。私は他の同様の質問を見ましたが、私のXMLスキーマは少し厄介です。ここで XSLT- XMLフォーマットと再利用性の変更

は私が

<root> 
    <row> 
    <var name="Name" value="Rusell" /> 
    <var name=" Surname" value=" Anthony" /> 
    <var name=" Country" value=" UK" /> 
    <var name=" Job" value="Web Designer" /> 
    <var name=" Cabin" value="345" /> 
</row> 
    <row> 
    <var name="Name" value="Wolf" /> 
    <var name=" Surname" value=" Werner" /> 
    <var name=" Country" value=" Germany" /> 
    <var name=" Job" value="Linux IT" /> 
    <var name=" Cabin" value="234" /> 
</row> 
</root> 

を持つXML形式であり、これは、私はそれが私が簡単にフィールドにアクセスすることができますので、次のようになりたいものです。

<root> 
<row name="Rusell" surName="Anthony" country="UK" job="Web Designer" cabin="345" /> 
<row name="Wolf" surname="Werner" country="Germany" job="Linux IT" cabin="234" /> 
</row> 

私は限りの書式が、これは値が挿入されていない遠ので、私が持っているものです行くように進歩を遂げています。 価値の選択を使用するときは、私は、これはちょうど私が試みているものを示すことで異なる構文を持つ、属性のカップルのために気づくでしょう - ここ

<root> 
<row Name="" Surname="" Country="" Job="" Cabin="" /> 
<row Name="" Surname="" Country="" Job="" Cabin="" /> 
<row Name="" Surname="" Country="" Job="" Cabin="" /> 
<row Name="" Surname="" Country="" Job="" Cabin="" /> 
</root> 

は私のXSLTファイルです。私はフィールドと属性を知っているが、私は住所、年齢すなわち、おそらくより多くのフィールドを持つ別のXMLファイルに服用されるとき

<xsl:template match="/"> 
<root> 
<xsl:apply-templates/> 

</root> 
</xsl:template> 

<xsl:template match="row"> 

<row> 
<xsl:attribute name="Name"> 
<xsl:value-of select="value"/> 

</xsl:attribute> 
<xsl:attribute name="Surname"> 
<xsl:value-of select="row/root/name/value"/> 

</xsl:attribute> 
<xsl:attribute name="Country"> 
<xsl:value-of select="root/row/value"/> 

</xsl:attribute> 
<xsl:attribute name="Job"> 
<xsl:value-of select="@value"/> 

</xsl:attribute> 
<xsl:attribute name="Cabin"> 
<xsl:value-of select="value"/> 

</xsl:attribute> 

</row> 

</xsl:template> 

はまた、再ユーザビリティの問題について、上記の方法で結構です。

したがって、次のことを行うXSLTファイルを作成するにはどうすればよいですか。

For each Node = root/row 
Create row = ([email protected] & [email protected]) 

私は上記のやろうとしているものと同じですが、私は名前値(姓、キャビンなど)を知っておく必要がありますので、私の最初のXMLファイルへの適用と、次はありませんのように再利用可能なIE 。

<root> 
    <row> 
    <var name="differentName" value="x" /> 
    <var name="anotherdifferentname" value="y" /> 
</row> 
    </root> 

私がもっとわかりやすくする必要がある場合は、事前にお知らせください。

+0

を行う必要があります。基本的にあなたのパスはどこにでもあり、野生の推測のように見えます。行と一致するテンプレートでは、Anthonyへのパスは 'var [@ name = 'Surname']/@ value' - つまり 'name'属性が 'Surname'と等しい子 'var'要素を選択してからこの 'var'要素の 'value'属性 –

+0

はい、私はあなたの批判に感謝します、私はおそらくあなたには明らかですXSLと無知です。構文を説明してくれてありがとう – user123

+0

@Michael Kay - 私が投票できるようにコメントを投稿していただければ幸いです(OPが別のものを受け入れたことは分かりますが、あなたのソリューションはより適切です)。 – Perception

答えて

1

これは、あなたが答えを与えられてきたが、時々私はそれは彼らが間違っていた何人に伝えることがより重要だと感じ、それを

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
    <xsl:output method="xml" indent="yes"/> 

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

    <xsl:template match="row"> 
    <row> 
     <xsl:apply-templates select="var"></xsl:apply-templates> 
    </row> 
    </xsl:template> 

    <xsl:template match="var"> 
    <xsl:variable name="attributeName" select="@name"> 
    </xsl:variable> 
    <xsl:attribute name="{$attributeName}"> 
     <xsl:value-of select="@value"/> 
    </xsl:attribute> 
    </xsl:template> 
</xsl:stylesheet> 
+0

偉大な私はまだこれをテストしていないが、私はまもなく、あなたにもかかわらず、多くのおかげで文法をレイアウトしました – user123

+0

あなたは大歓迎です。 –

+0

あなたは大歓迎です。 –

関連する問題