0

xsltに次のような変数があります。

<xsl:variable name="metadata">
    <Metadata>
        <xsl:apply-templates select="..." />
    </Metadata>
</xsl:variable>

その後、メタデータxmlをxsl:attributeとして別のノードに追加しようとしています。value-of、copy-ofを試しましたが、機能しませんでした。copy-ofを使用すると、以下のエラーが発生しました。

<OtherNode>
    <xsl:attribute name="someAttr">
        <!-- I tried these and neither worked -->
        <xsl:value-of select="$metadata" /> <!-- Empty -->
        <xsl:copy-of  select="$metadata" /> <!-- Error -->
    </xsl:attribute>
</OtherNode>

タイプ「要素」のアイテムは、タイプ「属性」のノード内に構築できません。

それはかなり簡単ですが、何らかの理由で、自動的に要素をエスケープすると思いました。

ちなみに私はxslt1.0を使用しています。

何か案は?

ありがとう

4

2 に答える 2

0

value-ofを使用する最初の試みは、(xs:textを使用して)小さなmodで機能するはずですが、少なくとも、Metadata要素なしでapply-templates呼び出しの値を返す必要があります。apply-templates select = "..."ビットが実際に何かを見つけて返していることを確認しますか?

これは機能します:

<xsl:variable name="metadata">
<xsl:text>&lt;Metadata></xsl:text>
    test
 <xsl:text>&lt;/Metadata></xsl:text>
</xsl:variable>


<xsl:template match="some-element">
  <xsl:element name="some-element">
    <xsl:attribute name="test"><xsl:value-of select="$metadata" /></xsl:attribute>
  </xsl:element>
</xsl:template>

出力は次のようになります。

 <some-element test="&lt;Metadata&gt;&#xA;        test&#xA;&lt;/Metadata&gt;">
于 2012-09-21T15:30:10.720 に答える
0

変数にテキストだけでなく、node()またはをキャプチャしたようですnode-settext()探しているものだけを選択するには、変数を変更する必要があります。

于 2012-09-21T15:33:41.073 に答える