2009-08-20 15 views
0

それは、XMLと似になるとハロー、すべての最初の が、私は私の初心者の質問で私を罰するいけないしてください、非常に精通していないです:Dどのように内部のすべてのパラメータを避けるために?

私はこのように見ているxmlファイルを持っている:

<?xml version="1.0" encoding="utf-8" ?> 
<mainstuff> 
    <category_major> 
     <project_name>Dream</project_name> 
     <project_attribute>Version 1.0</project_attribute> 
     <category_A></category_A> 
     <category_B></category_B> 
     <category_C></category_C> 
    </category_major> 
</mainstuff> 

それから私はこのように見ているXSLTファイルを得た:

<?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="/"> 
    <xsl:element name="mainstuff"> 
     <xsl:attribute name="version">1.0</xsl:attribute> 
     <xsl:apply-templates/> 
    </xsl:element>  
    </xsl:template> 

    <xsl:template match="category_major"> 
    <xsl:element name="category_major"> 
     <xsl:apply-templates/> 
    </xsl:element> 
    </xsl:template> 

    <xsl:template match="category_A"> 
    <xsl:element name="category_A"> 
     <xsl:apply-templates/> 
    </xsl:element> 
    </xsl:template> 

    <xsl:template match="category_B"> 
    <xsl:element name="category_B"> 
     <xsl:apply-templates/> 
    </xsl:element> 
    </xsl:template> 

    <xsl:template match="category_C"> 
    <xsl:element name="category_C"> 
     <xsl:apply-templates/> 
    </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

私は2つのパラメータ「PROJECT_NAME」と「project_attribute」を避けたいです。

<?xml version="1.0" encoding="utf-8" ?> 
<mainstuff> 
    <category_major> 
     <category_A></category_A> 
     <category_B></category_B> 
     <category_C></category_C> 
    </category_major> 
</mainstuff> 

しかし、私は何を取得することは、これは形質転換の後にある:

<?xml version="1.0" encoding="utf-8"?> 
<mainstuff version="1.0"> 
    <category_major> 
     **Dream 
     Version 1.0** 
     <category_A /> 
     <category_B /> 
     <category_C /> 
    </category_major> 
</mainstuff> 

テキストはそれにまだある私は、このような結果が欲しいです。どのように私はそれを修正することができます。私は間違って何をしていますか?どのようにパラメータを取得することができますが、その中のテキストなしで実現することができますか?このような私の例では、出力:あなたの助けを

<?xml version="1.0" encoding="utf-8" ?> 
<mainstuff> 
    <category_major> 
     **<project_name></project_name> 
     <project_attribute></project_attribute>** 
     <category_A></category_A> 
     <category_B></category_B> 
     <category_C></category_C> 
    </category_major> 
</mainstuff> 

ありがとう:D

+0

に役立ちます願っています - どの結果欲しいですか?あなたは、パラメータとその値なしで結果を求めました。最後に、値なしのパラメータを求めましたか? –

+0

私はそれぞれの結果が欲しいです。 1つずつ:D – Camal

答えて

2

要素に一致するテンプレートが存在しない場合、デフォルトのテンプレートが使用されます。既定のテンプレートの効果は、ノードの文字列値を出力することに効果的です。要素の場合は、すべての子孫テキストノードを連結したように見えます。

あなたはこの動作を無効にしたい場合は、あなたはスキップしたい要素のために、独自のノーオペレーションのテンプレートを提供する必要があります:あなたの2番目の要求については

<xsl:template match="project_name | project_attribute" /> 

、あなたは出力に要素をしたい場合は、しかし、すべての内容を取り除く、あなたはxsl:copyを使用することができます。

<xsl:template match="project_name | project_attribute"> 
    <xsl:copy /> 
</xsl:template> 

xsl:copyそのコピーのみの要素を。その属性もその子もコピーしません。

+0

ありがとうございます:D – Camal

0

は、それを反転してください、あなたが含めたいものではなく、除外したいものと一致:

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

<xsl:template match="*" priority="0"> 
    <xsl:element name="{local-name()}"> 
     <xsl:apply-templates /> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="project_name" priority="1"></xsl:template> 
<xsl:template match="project_attribute" priority="1"></xsl:template> 

申し訳ありませんがそれは少し不可解であるならば、私は明確にしてください、それは

+0

恒等変換( 'match =" * "'のために使用しようとしているようです)は 'xsl:copy'を使って書かれた方が良いでしょう。また明示的に優先順位を付ける必要はありません - '*'にマッチするテンプレートの優先順位は、常に、指定された要素と一致するテンプレートの優先順位よりも低くなります。 –

+0

優先度は上書きされるものを読みやすくするためのものです。私は常に上書きすることを意図したテンプレートにpriority = "0"を含めるようにしました。 いいえ、xsl:copyは要素childrenにテンプレートを適用しません解答するには – LorenVS

+0

''に ''(または他のコンストラクタ)を使うことができます。 –