2012-02-24 50 views

回答

6

使用processing-instruction()節點測試。

+1

Kirill,這個答案太籠統 - 你沒有提供一個特定的XPath表達式來精確選擇想要的PI。 – 2012-02-24 14:59:27

5

通常,可以使用processing-instruction()節點測試來選擇處理指令。

更具體地說,可以包括想要的PI節點的名稱(目標)作爲參數。

使用

/processing-instruction('xml-stylesheet') 

此選擇具有名稱xsl-stylesheet被在全局級別定義的任何處理指令(是所述頂部元件的兄弟姐妹)。

請注意,xsl:stylesheet是PI的無效PI目標。冒號':'用於從本地名稱分隔名稱空間前綴 - 但是處理指令目標不能屬於名稱空間。由於每W3c XPath Specification

處理指令有一個擴展名:本地部分是處理指令的目標;空間URI爲空」。

此外,根據W3C文檔:"Associating Style Sheets with XML documents 1.0」,則PI的一個樣式表將XML文檔相關聯必須是目標:"xml-stylesheet" - 不"xsl:stylesheet""xsl-stylesheet"

下面是一個完整的例子

<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文檔施加:

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

XPath表達式求值和所選擇的PI節點輸出

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

我看到你仍然在使用你的舊技巧......刪除並重新發佈一個放棄反對票的答案直接導致了濫用:人們如何決定評價你的答案是他們的決定,而不是你的答案。請不要再這樣做。 – Shog9 2012-02-26 06:38:14

+0

'/ processing-instruction('xml-stylesheet')'選擇名爲'xsl-stylesheet'的東西嗎?這將是神奇的!請注意'xml' vs'xsl'。 – 2013-05-28 09:53:36

+0

@MicheldeRuiter,是的,它的確如此。這是在這裏正式定義的(底部第三段):http://www.w3.org/TR/xpath/#node-tests – 2013-05-28 14:01:52

0

甲處理指令帽兩個部分目標和數據的語法:

<?target data?> 

如果您使用:

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

它只會返回數據的一部分,在Dimitre Novatchev的例子,它返回:

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

所以處理指令的字符串值是數據的一部分。選擇表達式<xsl:value-of進行評估,並將結果對象轉換爲字符串,如隱式調用string()函數。

相關問題