我正在尝试使用 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/