2

私は、単一の XSL と処理 (これまでに行われたコンテンツと処理に基づいて使用する URL を決定する) で収集している一連の相互に関連するドキュメントを操作しています。

たとえば、ドキュメントは次を使用して XSL からフェッチされています。

<xsl:for-each select=
"(document('<someURL>')//atom:entry/atom:content/m:properties/d:PresentationContent) 
[position()=1]">
  <xsl:call-template name="formHandler"/>
</xsl:for-each>

ほとんどのドキュメントでは、これで問題ありません。

例外として、要素のコンテンツにd:PresentationContentエスケープされた XML が直接テキストとして含まれる (つまり、cdata を使用しない) 場合があります。

&lt;Component&gt;&lt;Id&gt;tcm:10-7788&lt;/Id&gt;&lt;/Component&gt;

XSL 内でドキュメントをフェッチし、エンコードされた文字列を XML に変換し、ノードをドキュメントの一部であるかのように処理して、例を次のように処理する方法はありますか。

//atom:entry/atom:content/m:properties/d:PresentationContent/atom:Component/atom:Id 

私はすでにソリューションの長い道のりを歩んでおり、この段階で変更するには非常にコストがかかるため、どんな助けも非常に感謝しています. (バックアップ計画は、私がリクエストを送信し、プロキシに応答をクリーンアップさせる http プロキシを構築することです。)

4

1 に答える 1

0

XSLT 3.0 では、次のparse-xml()関数を使用できます。

<xsl:template name="formHandler">
    <xsl:apply-templates select="parse-xml(text())/Component/Id" />
</xsl:template>

エスケープされた XML には宣言された名前空間または名前空間プレフィックスがないため、要素は名前空間なしでアドレス指定する必要があります。

于 2013-05-10T01:13:21.490 に答える