未显示XSL属性值
本文关键字:属性 XSL 显示 | 更新日期: 2023-09-27 18:11:26
这是我的xml:
<RESPONSE heading="Broker List">
<RESULTSET nbr="1" rowcount="11">
<ROW nbr="1">
<COL nbr="1" name="broker_name" datatype="String" href="api">BARC</COL>
<COL nbr="2" name="broker_id" datatype="String">11</COL>
</ROW>
</RESULTSET>
</RESPONSE>
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/RESPONSE">
<html>
<head>
</head>
<body class='data'>
<h2><xsl:value-of select="./@heading"/></h2>
<xsl:apply-templates select="RESULTSET" />
</body>
</html>
</xsl:template>
<xsl:template match="RESULTSET">
<table id="result" class="sortable-theme-finder" data-sortable="">
<thead>
<xsl:for-each select="ROW[1]/COL">
<th> <xsl:value-of select="@name" /></th>
</xsl:for-each>
</thead>
<tbody>
<xsl:apply-templates select="ROW" />
</tbody>
</table>
<br/>
</xsl:template>
<xsl:template match="ROW" >
<tr>
<xsl:apply-templates select="COL" />
</tr>
</xsl:template>
<xsl:template match="COL">
<td border="1">
<a><xsl:attribute name="href"><xsl:value-of select="@href"/></xsl:attribute>
<xsl:value-of select="."/>
</a>
</td>
</xsl:template>
</xsl:stylesheet>
导致如下:
<tr>
<td border="1"><a href="broker_name">BARC</a></td>
<td border="1"><a href="broker_id">11 </a></td>
</tr>
但是如果我改变这一行:
<xsl:value-of select="@name" />
<xsl:value-of select="@href" />
结果如下:
<tr>
<td border="1"><a href="">BARC</a></td>
<td border="1"><a href="">11 </a></td>
</tr>
为什么@href属性没有被选中?它将只接受name属性。我也试过"id",但没有成功。我使用c# XslCompiledTransform来执行转换。谢谢!
改变
<xsl:attribute name="href"><xsl:value-of select="@name"/></xsl:attribute>
<xsl:attribute name="href"><xsl:value-of select="@href"/></xsl:attribute>
在此上下文中工作(xsl:for-each
中的当前上下文节点)。我稍微调整了一下您的样式表,使其符合以下要求,但其工作方式类似:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="ROW" >
<tr>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="COL">
<td border="1">
<a>
<xsl:copy-of select="@href"/>
<xsl:apply-templates/>
</a>
</td>
</xsl:template>
</xsl:transform>
XML输出
输出将是,给定您显示的输入文档:
<?xml version="1.0" encoding="UTF-8"?>
<tr>
<td border="1">
<a href="api">BARC</a>
</td>
<td border="1">
<a>11</a>
</td>
</tr>
正如您所看到的,href
属性被保留了—对于在输入中出现的单个COL
元素。
请在此在线尝试此解决方案。
我想也许href是一个保留字,所以我尝试了ref和其他属性名。
没有,"href"在XML中不是保留名称,也没有预定义的语义,而在HTML中是这样。
<xsl:value-of select="@href"/>
将只从名为"href"的属性中检索内容。