我有一个XSLT文件和一个XML文件。在XML文件中,我有一个具有Class属性的Image标签。当我想用XSL文件中的这些Image做某些事情时。从它们中移除图像,即:
<head>
<title>ERKLAERUNG</title>
</head>
<body>
<h1>Erklärung</h1>
<hr/>
<p>
Ich kenne einen Herrn
<span class="vcard">
<span class="fn">Henry Riedel</span>
**<img class="pic" src="hk.png" />**
(<i class="nick">hrick</i>) , der in einer
<span class="org">Hauschuhfirma</span> arbeitet. Seine
Telefonnummer (
<span class="tel">
<i class="type">home</i>) ist:
<span class="value">+4.444.444.4442</span>
</span>
</span>
....
当我将这些代码块添加到XSLT文件中时,删除了类'pic'的图像:
...
<xsl:template match="*[@class='pic']">
<u>
<a>
<xsl:attribute name="onclick">
<xsl:text>show_hcard('</xsl:text>
<xsl:value-of select="text()"/>
<xsl:text>')</xsl:text>
</xsl:attribute>
<xsl:value-of select="text()"/>
</a>
</u>
</xsl:template>
...
但是,例如,如果我将我的XSLT文件中的类名改为“mmmm”,那么效果很好,并向我显示图像 你能帮帮我吗? 非常感谢你
答案 0 :(得分:0)
您正在捕捉图像元素,但之后没有对其执行任何操作,因此不会输出。尝试这样的事情。添加属性时,需要输出现有元素及其内容。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="no" media-type="xml"/>
<xsl:template match="*[@class='pic']">
<xsl:element name="{local-name(.)}">
<xsl:attribute name="onclick">
<xsl:text>show_hcard('</xsl:text>
<xsl:value-of select="../parent::node()//span[@class='fn']"/>
<xsl:text>')</xsl:text>
</xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
处理此问题的正确方法是使用Identity Transform和适当的覆盖。请注意,覆盖模板会复制现有元素的现有属性和未修改的子节点;它所做的就是添加一个新属性:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[@class='pic']">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="onclick">
<xsl:text>show_hcard('</xsl:text>
<xsl:value-of select="../span[@class='fn']"/>
<xsl:text>')</xsl:text>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
相关产出:
<img class="pic" src="hk.png" onclick="show_hcard('Henry Riedel')">
第一个模板复制大多数元素。第二个模板仅处理具有值为pic
的class属性的元素。
完整输入:
<html>
<head>
<title>ERKLAERUNG</title>
</head>
<body>
<h1>Erklärung</h1>
<hr/>
<p>
Ich kenne einen Herrn
<span class="vcard">
<span class="fn">Henry Riedel</span>
**<img class="pic" src="hk.png" />**
(<i class="nick">hrick</i>) , der in einer
<span class="org">Hauschuhfirma</span> arbeitet. Seine
Telefonnummer (
<span class="tel">
<i class="type">home</i>) ist:
<span class="value">+4.444.444.4442</span>
</span>
</span>
</p>
</body>
</html>
完整输出:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ERKLAERUNG</title>
</head>
<body>
<h1>Erklärung</h1>
<hr>
<p>
Ich kenne einen Herrn
<span class="vcard"><span class="fn">Henry Riedel</span>
**<img class="pic" src="hk.png" onclick="show_hcard('Henry Riedel')">**
(<i class="nick">hrick</i>) , der in einer
<span class="org">Hauschuhfirma</span> arbeitet. Seine
Telefonnummer (
<span class="tel"><i class="type">home</i>) ist:
<span class="value">+4.444.444.4442</span></span></span></p>
</body>
</html>