0

入力 XML:

<Parent>
    <Child attr="thing">stuff</Child>
</Parent>

xslt:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="Child">
        <newChild chars="{..}" />
    </xsl:template>
</xsl:stylesheet>

希望する出力:

<newChild chars="&lt;Child attr=&quot;thing&quot;&gt;stuff&lt;/Child&gt;" />

「chars」属性の値は、「Child」タグのエスケープ バージョンに過ぎないことに注意してください。

問題: 現在一致している要素を属性に取得するにはどうすればよいですか? 私..は通常それを行うと思いますが、属性について話すときはそうではないようです。ランダムなxmlエンティティの後に子タグの値が続くだけです<newChild chars="&#xA; stuff&#xA;"/>。それを有効にするには、エスケープする必要があるかもしれないと思っています。

任意の提案をいただければ幸いです。

(そして、なぜこのようなことをしたいのかと誰もが尋ねる前に、接続しているアプリケーションのAPIによって制約されています)

4

2 に答える 2

0

少しずつ積み上げていく必要がありそうです。..親を指すことに注意してください。おそらく、作成、"&lt;Child attr=&quot;"追加、、、、<value-of select='@attr'/>それらすべてを連結し、を使用して chars 属性を作成する必要があります"&gt;"<value-of select="."/>"&lt;/Child>"<xsl:attribute/>

何かのようなもの:

   <newChild >
     <xsl:attribute name="chars">&lt;Child attr=&quot;<xsl:value-of select="@attr"/>"&gt;"<value-of select="."/>&lt;/Child&gt;</xsl:attribute>
   </newChild>

確認していませんが、参考になれば幸いです。

ただし、非常にエラーが発生しやすいです。これを行う必要がある場合、おそらく XSLT は使用せず、「toXML()」メソッドを持ち、それに対して escapeXML() を実行する DOM を使用します。

于 2013-05-14T15:12:42.587 に答える