从名称空间前缀节点中删除xmlns属性

时间:2010-07-07 10:06:04

标签: xml xslt

我正在尝试使用XSLT创建Edge Side Includes html块。

以下是XSLT示例

<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:esi="http://www.edge-delivery.org/esi/1.0" 
                exclude-result-prefixes="xsl esi">

    <xsl:output method="html" 
                media-type="text/html" 
                version="1.0" 
                encoding="UTF-8" 
                indent="no" 
                omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <esi:vars>
            <xsl:text>some text goes here</xsl:text>
        </esi:vars>
    </xsl:template>

</xsl:stylesheet>

虽然转换本身是有效的,但输出是:

<esi:vars xmlns:esi="http://www.edge-delivery.org/esi/1.0">some text goes here</esi:vars>
问题是,xmlns:esi属性可怕地破坏ESI执行。 如果我手动删除属性(例如:打开HTML并删除它,再次保存代码块)一切正常。

问题:如何从HTML输出中删除xmlns:esi? 我尝试将它包含在exclude-results-prefixes中,但没有用。

将起作用的示例输出:

<esi:vars>some text goes here</esi:vars>

3 个答案:

答案 0 :(得分:2)

  

问题:如何删除   xmlns:来自HTML输出的esi?一世   尝试将其包括在内   排除结果前缀,但没有   工作

使用输出方法xml的XSLT无法生成非格式良好的XML。

当手动删除名称空间声明时,"esi:"前缀不会绑定到任何名称空间,因此整个文档的格式不正确。

根据ESI规范,esi名称空间通常必须在文档的顶部元素(<html>)中声明

试试这个

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

<xsl:template match="/">
   <html xmlns:esi="http://www.edge-delivery.org/esi/1.0">
    <esi:vars>
        <xsl:text>some text goes here</xsl:text>
    </esi:vars>
    </html>
</xsl:template>

</xsl:stylesheet>

产生

<html xmlns:esi="http://www.edge-delivery.org/esi/1.0">
    <esi:vars>some text goes here</esi:vars>
</html>

答案 1 :(得分:2)

使用任何输入,此样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
    <xsl:text>&lt;esi:vars></xsl:text>
        <xsl:text>some text goes here</xsl:text>
    <xsl:text>&lt;/esi:vars></xsl:text>
</xsl:template>

</xsl:stylesheet>

结果:

<esi:vars>some text goes here</esi:vars>

注意:对于格式不正确的输出,您只能使用DOE或TEXT序列化。

答案 2 :(得分:1)

我找到了专业的方法。正确答案取决于以下内容:

<xsl:stylesheet
  version="1.0" xmlns:asp="remove"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:app="http://myNamespace.com/app" 
  exclude-result-prefixes="app">

在此使用此功能排除前缀

exclude-result-prefixes

有关详细信息:http://msdn.microsoft.com/en-us/library/ms256204.aspx