繁体   English   中英

使用XSLT在html中选择特定标签,然后将标签内容打印到XML

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM