2009-09-03 72 views
0

我必須傳回來自不同來源的信息,並且可以在兩者之間進行轉換,但根據源文檔是否具有xml處理指令,我必須將其傳遞,如果不存在,則不應傳遞它。是否可以基於源文檔中的XML處理指令來包含/排除XML處理指令?

Input 
<?xml version="1.0" encoding="UTF-8"?> 
<Source/> 

Output  
<?xml version="1.0" encoding="UTF-8"?> 
<Source/> 

如果它沒有處理指令,我不應該包括它的輸出,主要是爲了支持其他一些舊的程序,不明白他們(廢話!)

我可以動態切換樣式和使用omit-xml-declaration是基於輸入是否具有指令,但有沒有辦法在單個樣式表中執行?

編輯:我不能刪除在返回數據之前存在的轉換。

編輯:我剛纔看到,即使它看起來像一個處理指令,<?xml version.. ?>,事實上它不是,所以不知道是否有可能匹配它,有什麼建議嗎?

回答

2

XML聲明看起來像一個處理指令,但它不是。

它通知XML解析器它將要讀取的文檔(XML版本,字符編碼)。

它不存在於生成的DOM/infoset中,因此無法在XSLT中匹配。

此外,您不能動態更改<xsl:output>指令,類似<xsl:if><xsl:choose>構造中的不同輸出元素將不起作用。

我的建議是:如果下游應用的一部分,不明白XML聲明(這是一個 跆拳道 事實真的讓我抓我的頭),然後用離開他們了所有的時間:

<xsl:output omit-xml-declaration="yes" /> 
+0

我的意思是,我可以動態地切換樣式表本身,一個具有omit-xml聲明和一個沒有。感謝您的回答。 – Thiyagaraj 2009-09-03 10:07:46

+0

您可以在源文檔中查找字符串「<?xml」'並決定要運行的樣式表。不過,我認爲你不能從* XSLT中*做出決定。 – Tomalak 2009-09-03 10:10:33