【发布时间】:2015-11-28 11:18:53
【问题描述】:
我正在尝试使用 xslt 2.0 将 xml 转换为 xhtml。
我正在为某些元素创建单独的文档,如下所示:
<xsl:result-document method="xhtml" href="output/{generate-id()}.html" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" encoding="utf-8" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
<xsl:value-of select="$title"/>
</title>
<link rel="stylesheet" type="text/css" href="styles.css"/>
</head>
<body>
<div id="{generate-id()}">
<xsl:apply-templates/>
</div>
</body>
</html>
</xsl:result-document>
不过,我在命名空间方面遇到了问题。一些创建的文档如下所示:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title/>
<link rel="stylesheet" type="text/css" href="styles.css" />
</head>
<body>
<div id="d1e1203">
<img xmlns="" src="file:/P:/199/199201.tif" alt=""/>
<h1 xmlns="">gfdg</h1>
<h1 xmlns="">gfdg</h1>
<img xmlns="" src="file:/P:/124/124566.tif" alt="gdf"/>
<!-- and so on -->
为什么在一些html的后代中添加了xmlns=""?
如果我这样说:
<xsl:result-document method="xhtml" href="output/{generate-id()}.html" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" encoding="utf-8" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
然后不会添加空的命名空间属性。但是,当我转换其中一个文档时,出现以下错误:
Warning: SXXP0005: The source document is in namespace http://www.w3.org/1999/xhtml, but all the
template rules match elements in no namespace (Use --suppressXsltNamespaceCheck:on to
avoid this warning)
如何正确处理命名空间?
【问题讨论】:
-
您没有提供reproducible example。一般来说,如果你复制一个没有命名空间的元素,那么它会按照你显示的方式出现,以便与
<html xmlns="http://www.w3.org/1999/xhtml">建立的默认命名空间区分开来。 -
好吧,我并没有真正复制任何东西。我只想创建 xhtml 文档。为此,据我了解,html-Tag 需要具有 xhtml 命名空间,而我需要 xhtml Doctype。我的示例代码中缺少什么?
-
"我的示例代码中缺少什么?" (a) 输入; (b) 上下文(你的模板匹配什么?); (c) 创建
img和h1元素的部分(样式表中的其他模板?)。 请查看我第一条评论中的链接。