2012-02-24 13 views

答えて

6

processing-instruction()ノードテストを使用してください。

+1

Kirill、この回答はあまりにも一般的です - あなたは、正確に目的のPIを選択する特定のXPath式を提供していません。 –

5

一般に、processing-instruction()ノードテストを使用して処理命令を選択できます。

より具体的には、所望のPIノードの名前(ターゲット)を引数として含めることができます。

使用

/processing-instruction('xml-stylesheet') 

これはグローバルレベル(最上位要素の兄弟である)で定義された名前xsl-stylesheet有する任意の処理命令を選択します。

xsl:stylesheetは、PIの無効なPIターゲットです。コロン':'は、ローカル名からの名前空間接頭辞を区切るために使用されますが、処理指示ターゲットは名前空間に属しません。同様にあたりW3c XPath Specification

処理命令は展開名を持っている:ローカル部分は、処理命令の対象であり、名前空間はURIがnullです。」

また、W3Cの文書によると:"Associating Style Sheets with XML documents 1.0」、XML文書にスタイルシートを関連付けPIのターゲットがある必要があります。"xml-stylesheet" - ない"xsl:stylesheet""xsl-stylesheet"

ここでは完全な例であります:この変換は、次のXML文書に対して適用される

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:copy-of select="/processing-instruction('xml-stylesheet')"/> 
</xsl:template> 
</xsl:stylesheet> 

<?xml-stylesheet type="text/xsl" href="test"?> 
<Books> 
    <Book name="MyBook" /> 
</Books> 

XPath式は評価され、選択されたPIノードが出力ある:構文を有する2つの部分が標的

<?xml-stylesheet type="text/xsl" href="test"?> 
+11

あなたはまだあなたの古いトリックを見ています...ダウン投票を破棄する回答を削除して再投稿することはまっすぐな虐待です。あなたの回答を評価する方法はあなたのものではなく、自分の判断です。もう一度やり直してください。 – Shog9

+0

'/ processing-instruction( 'xml-stylesheet')'は、 'xsl-stylesheet'という名前のものを選択しますか?それは魔法だろう! 'xml'と' xsl'をメモしてください。 –

+0

@MicheldeRuiterはい、そうです。これは正式にここで定義されています(下から3番目の段落)。http://www.w3.org/TR/xpath/#node-tests –

0

処理命令ハットとデータ:

<?target data?> 

あなたが使用する場合:

<xsl:value-of select="/processing-instruction('xml-stylesheet')" /> 

はそれだけDimitre Novatchevの例では、データの一部が返されます、それが返されます。

type="text/xsl" href="test" 

だから処理命令の文字列値は、データ部分です。選択式<xsl:value-ofが評価され、結果オブジェクトはstring()関数の暗黙的な呼び出しのように文字列に変換されます。

関連する問題