未显示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属性值

改变

<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中的当前上下文节点)。我稍微调整了一下您的样式表,使其符合以下要求,但其工作方式类似:

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元素。

请在此在线尝试此解决方案。


我想也许href是一个保留字,所以我尝试了ref和其他属性名。

没有,"href"在XML中不是保留名称,也没有预定义的语义,而在HTML中是这样。

<xsl:value-of select="@href"/>

将只从名为"href"的属性中检索内容。