xml - 从命名空间前缀节点中删除 xmlns 属性

标签 xml xslt

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

这是一个示例 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? 我尝试将其包含在排除结果前缀中,但没有成功。

可以使用的示例输出:

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

最佳答案

Question: How can I remove the xmlns:esi from the HTML output? I tried including it in exclude-results-prefixes, but didn't work.

使用输出方法 xml 的 XSLT 无法生成格式不正确的 XML。

当手动删除命名空间声明时,"esi:"前缀不再绑定(bind)到任何命名空间,整个文档因此变得不格式良好。

根据 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>

关于xml - 从命名空间前缀节点中删除 xmlns 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3193748/

相关文章:

c# - 属性中的冒号被 XmlDocument 截断了吗?

sql-server - T-SQL 查找具有匹配文本的节点并从 XML 字段中的同级节点中提取值

xml - 如何使用 XQuery 以 CSV 格式提取多个 xml 元素?

html - 奇怪的 HTML/XML 编码问题

xml - 替换各种 XML 文件中的字符串

xml - XQuery:同一模块中有两个 namespace ?

c# - 最佳实践 - 我应该如何在 Visual Studio AddIn 中保留用户输入?

java - JAX-RS/ Jersey +文本/xml : can I specify a xml-stylesheet?

xml - xslt:如何忽略没有匹配项的应用模板元素?

c# - 如何构建自定义 AngleSharp 元素并将 HTML 部分插入/转换到元素中