xslt
2016-05-14 8 views 0 likes 
0

これは重複していますが、XSLについてはほとんど分かりませんので、私が見つけた他の回答は適用できませんでした。XSL:元のファイルにそのタグがある場合のみタグを含む

<node> 
    <xsl:attribute name='TEXT'><xsl:value-of select='@text' /></xsl:attribute> 
    <richcontent TYPE="NOTE"><xsl:value-of select='@_note' /></richcontent> 
</node> 

は、だから私は必要なもの@_note要素が元の文書に存在する場合にのみ<richcontent>タグを作成することです。存在しない場合は、新しい文書に<richcontent>タグを作成したくありません。

私は「いつ」のようなものが必要だと思っていますが、使用方法がわかりません。私は、次の

<node> 
    <xsl:when test='@_note'> 
    <richcontent TYPE="NOTE"><xsl:value-of select='@_note' /> 
    </richcontent> 
    </xsl:when> 
</node> 

をしようとすると、これはvalid QNameではないので、それは「@」文字で始まるので、私は、

element when is not allowed within that context 
+0

ソースXMLの抜粋を提供すると便利です。 – zx485

+1

** 1。**入力の例が参考になるでしょう - あなたのコードが文脈で見えるでしょう。 ** ** ** **ここでいくつかの用語を誤解していると思います。 '_note'ノードは**要素**ではなく**属性**です。あなたが作成しているのは間違いなく**要素**であり、**タグ**ではありません。 –

答えて

0

は何@_node要素があってはいけません、このエラーが発生します。 QNamesは、:_A-Za-z、または上記のリンクで説明されているいくつかのUniCode文字でのみ開始できます。 <xsl:when>はこのような<xsl:choose>のコンテキスト内でのみ有効であるため、解決に

あなた<xsl:when>アプローチは、無効です。

<node> 
    <xsl:choose> 
    <xsl:when test='@_note'> 
     <richcontent TYPE="NOTE"> 
     <xsl:value-of select='@_note' /> 
     </richcontent> 
    </xsl:when> 
    </xsl:choose> 
</node> 

しかし、あなたはQNameの仕様に準拠して何かにあなたの要素@_noteの名前を変更する必要があります。

+1

は美しく動作します、ありがとう! @_noteのものは明確です。私はその属性を持つタグについて話していました。 –

+0

@MrLMrK:それを読むのはうれしい。属性としてではなく要素として '@ _note'の名前を誤った場合、それは起こります;-) – zx485

1

xsl:whenxsl:chooseの子である必要があるため、表示されるエラーがスローされます。

あなたの場合、別のxsl:whenまたはxsl:otherwiseの手順がない場合は、xsl:ifを代わりに使用する必要があります。

また、問題のノードに一致するテンプレートを使用することもできます。ノードが存在しない場合、テンプレートは適用されず、新しい要素は作成されません。

関連する問題