[英]Select specific tags in html using XSLT and print the contents of the tags to XML
对不起,最后发表。
现在,我将尝试变得更加清晰。
我需要从html中选择一些标签,并且我有以下xslt
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="a"><xsl:apply-templates/></xsl:template>
<xsl:template match="img"/>
</xsl:stylesheet>
根据我的理解,这从html页面/ doc中选择<a>
和<img>
标签,并在标签内打印内容(如果我的理解是错误的,请告诉我)。 但是上面的XSLT输出页面的整个html。 谁能指出我哪里出了问题以及需要做些什么才能使其正确。
谢谢。
我认为您的理解不太正确。 依次查看XSLT中的模板,您将从标准身份模板开始
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
这将简单地复制元素及其属性,然后继续处理其子元素。 因此,如果您的HTML中有一个h1标记,它将按原样输出。
然后,您跟进的元素的模板。
<xsl:template match="a"><xsl:apply-templates/></xsl:template>
因为这比身份模板更具体,所以它将具有优先权。 在您的情况下,它不会复制a元素,但会处理其子元素。 假设您的元素仅包含文本,则应根据需要输出。
您的最终模板与img元素匹配
<xsl:template match="img"/>
但是所有这些都是完全忽略了它。
值得注意的是,XSLT具有内置模板,在找不到匹配项时会使用该模板。 这些不会复制元素,但是会继续处理其子元素。 因此,如果您不想复制所有HTML元素,则可以仅依赖内置模板,而只需为希望对其执行特定操作的元素添加模板。
我不是100%肯定您的要求,但如果你是只想拿一个元素中的一些XHTML和输出只有文字,你可以使用这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="a/text()">
<xsl:value-of select="." />
</xsl:template>
<xsl:template match="text()" />
</xsl:stylesheet>
因此, <xsl:template match="a/text()">
将输出a元素内的文本,而不太具体的<xsl:template match="text()">
将忽略所有其他文本。 内置模板用于其他元素,如前所述,它将不输出它们,仅处理其子元素(因此最终它将到达文本节点)。
因此,例如,如果您有此HTML
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Test</h1>
Welcome!
<img src="test.jpg" alt="Test Image" />
<p><a href="test.html">Test Link</a></p>
</body>
</html>
所有将要输出的是
Test Link
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.