是否有可能获得由xsl填充的项目的值?

时间:2013-03-20 19:14:53

标签: javascript xml flash xslt

我正在使用具有XML文件的Flash地图。我使用XSLT从XML填充了地图网页(flash地图之外)的列表。我想通过XSL添加一个JS函数,从XML中选择将与地图交互的XML(已填充)元素。

例如,我的列表是50个州。以下是XML的一小部分:

<attributes>
        <col name="State">Kentucky</col>
        <STATENAME>Kentucky</STATENAME>
  </attributes>

等......所有50个州都包含在XML中,如上所述

以下是我填充列表的方式:

<table border="0">
      <tr bgcolor="#9acd32">
        <th>State</th>
      </tr>
<xsl:for-each select="map/layer/feature/attributes">
<xsl:sort select="STATENAME"/>
      <tr>
        <td><a onMouseOver='highlight()' onMouseOut='highlight_clear()'><xsl:attribute name="href">http://mysite.com/<xsl:value-of select="STATENAME"/>.html</xsl:attribute><xsl:value-of select="STATENAME" /></a></td>
      </tr>
      </xsl:for-each>
    </table>

所有50个州都以这种方式提供指向其个人页面的链接:http://mysite.com/statename.html

这是Javascript:

function highlight() {
            theMap.features('State="Kentucky"').highlight({visible: true, fillColor: "#FFFF00", fillAlpha: 1.0});          
        }

这里的关键是('State =“Kentucky”')我试图让State to =在列表中填充的SAME状态,而不必编写50个不同的函数 - 一个用于每个州。例如,当填充所有50个州时,如果鼠标越过德克萨斯州,它将自动调出Map.features('State =“Texas”')如果它越过内布拉斯加州,那么它将调出内布拉斯加州。

我试过这样做:

function highlight() {
var sn='<xsl:value-of select="STATENAME"/>';
                theMap.features('State="sn"').highlight({visible: true, fillColor: "#FFFF00", fillAlpha: 1.0}); }

但它不起作用,我认为也不会。但是,它本质上是我想要发生的事情。

想法?

1 个答案:

答案 0 :(得分:0)

你应该可以这样做:

<table border="0">
  <tr bgcolor="#9acd32">
     <th>State</th>
  </tr>
  <xsl:for-each select="map/layer/feature/attributes/STATENAME">
    <xsl:sort select="."/>
      <tr>
        <td>
          <a onMouseOver='highlight("{.}")' 
             onMouseOut='highlight_clear()'
             href='http://mysite.com/{.}.html'>
             <xsl:value-of select="." />
          </a>
        </td>
      </tr>
   </xsl:for-each>
</table>

然后只需将highlight()函数更改为:

function highlight(state) {
    theMap.features('State="' + state + '"')
          .highlight({visible: true, 
                      fillColor: "#FFFF00", 
                      fillAlpha: 1.0});          
}