這可能是一個非常簡單的問題,但它的一個我似乎無法得到,正在撕裂我的頭髮。我有以下XML:XSL和命名空間
<?xml-stylesheet type="text/xsl" href="email.xsl"?>
<Example xmlns="">
<Name xmlns="urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1">Mark</Name>
</Example>
,我試圖使用以下XSLT:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="/">
<html>
<body>
<table width="90%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p>AUTOMATED CONFIRMATION: This confirmation email is unable to take replies. For further assistance please visit our Help pages or Contact us</p>
<p>Dear <xsl:value-of select="Name"/>,</p>
<p>Thank you for blah blah... </p>
</td>
</tr>
</table>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我不能讓這個名字的時候,我使用了XML飼料中的xmlns=urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1
出現,當我刪除xmlns
,名稱顯示正常。
是否有一些我失蹤的語法?我嘗試添加的命名空間的<xsl:stylesheet>
元素:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rpg="urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1"
>
然後用我給了XSLT的XPath表達式的前綴:
<xsl:value-of select="Name"/>
但是,這也不行。誰能幫忙?提前致謝。
這是一個壞主意,因爲它不僅效率低下(因爲字符串比較緩慢),而且也沒有考慮它真正應該做的命名空間。 – Lucero 2010-04-06 17:33:57
...如果名稱空間相關(如果不同名稱空間需要不同的行爲)。如果XSL只是格式化您感興趣的原始XML的內容,那麼命名空間並不那麼相關,並且可以忽略。在OP示例中,名稱空間是* not *旨在保留在輸出XML中,僅保留元素的文本內容。 我不確定對性能的關注。請記住,根據XPath函數定義「* [name()= name]」等同於「name」;無論如何,爲了優化目的,編譯器可以自由地將XPath表達式重寫爲等價的表達式。 – user268396 2010-04-06 18:33:07
+1這不是一個壞的或錯誤的答案,值得一個負分。它有一些含義,但它們被命名。性能參數強烈依賴於當前節點有多少個子節點以及XSLT處理器如何優化。命名空間參數在很大程度上取決於您是否在意。 ;) – Tomalak 2010-04-07 17:26:42