gpt4 book ai didi

xsltproc 不按名称选择元素

转载 作者:行者123 更新时间:2023-12-04 22:51:46 26 4
gpt4 key购买 nike

我正在尝试使用 XSLT 样式表转换 XHTML,但我什至无法获得匹配任何内容的基本样式表。我确定我错过了一些简单的东西。

这是我的 XHTML 源文件(没什么大惊小怪的):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 25 March 2009), see www.w3.org" />
...
</body>
</html>

实际内容并不重要,我将在下面演示。顺便说一句,我很确定该文档格式良好,因为它是通过 tidy -asxml 创建的。 .

我更复杂的 XPath 表达式没有返回任何结果,所以作为一个健全的测试,我试图使用以下样式表非常简单地转换它:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
<xsl:text>---[</xsl:text>
<xsl:for-each select="html">
<xsl:text>Found HTML element.</xsl:text>
</xsl:for-each>
<xsl:text>]---</xsl:text>
</xsl:template>
</xsl:stylesheet>

转换是通过 xsltproc --nonet stylesheet.xsl input.html 完成的,并且输出是:“---[]---”(即,它没有找到 html 的子元素)。但是,如果我更改 for-each部分到:
<xsl:for-each select="*">
<xsl:value-of select="name()"/>
</xsl:for-each>

然后我得到“---[html]---”。同样,如果我使用 for-each select="*/*"正如我所料,我得到了“---[headbody]---”。

为什么它可以通过 * 找到子元素(使用 name() 给出正确的名称)但它不会直接使用元素名称找到它?

最佳答案

html源 XML 中的元素定义了一个命名空间。您必须将它包含在您的匹配表达式中并在您的 xsl:stylesheet 中引用它。元素:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/1999/xhtml">
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
<xsl:text>---[</xsl:text>
<xsl:for-each select="html:html">
<xsl:text>Found HTML element.</xsl:text>
</xsl:for-each>
<xsl:text>]---</xsl:text>
</xsl:template>
</xsl:stylesheet>

关于xsltproc 不按名称选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3954686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com