这可能是一个非常简单的问题,但它的一个我似乎无法得到,正在撕裂我的头发。我有以下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