这是我的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>
这个xls有效:
<?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属性。试过&#39; id&#39;也没有去。我正在使用C#XslCompiledTransform来执行转换。谢谢!
答案 0 :(得分:0)
更改
<xsl:attribute name="href"><xsl:value-of select="@name"/></xsl:attribute>
到
<xsl:attribute name="href"><xsl:value-of select="@name"/></xsl:attribute>
在此上下文中工作(xsl:for-each
内的当前上下文节点)。我稍微调整了您的样式表,但它的工作方式类似:
XSLT样式表
<?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
元素。
尝试此解决方案online here。
我想也许href是一个保留字,所以我尝试了ref和其他属性名称。
不,“href”不是XML中的保留名称,也没有预定义的语义,就像在HTML中一样。
<xsl:value-of select="@href"/>
只会从名为“href”的属性中检索内容。