显示xml数据的链接

时间:2014-10-20 20:20:21

标签: javascript html xml xslt hyperlink

如何在xtml页面导出的数据中在html页面上显示可点击的href链接?下面是我正在使用的代码。所有数据导出都很好,只是链接无法点击。所以基本上如果用户点击导出表中的item1.html链接,他会被定向到item1.html页面

<?xml version="1.0" encoding="utf-8"?>
<body onload="transformxml()">
<div id="result_output"></div>
<textarea id="xmlcode" style="display:none">
<catalog>
  <cd>
    <title>Item1</title>
    <start>09:15</start>
    <stop>10:00</stop>
    <link><a href="item1.hml">Item 1</a></link>
  </cd>
  <cd>
    <title>Item2</title>
    <start>10:15</start>
    <stop>11:00</stop>
    <link><a href="item2.hml">Item 2</a></link>
 </cd>
   <cd>
      <title>Item3</title>
      <start>12:15</start>
      <stop>13:00</stop>
      <link><a href="item3.hml">Item 3</a></link>
   </cd>
  <cd>
   <title>Item4</title>
   <start>14:15</start>
   <stop>15:00</stop>
   <link><a href="item4.hml">Item 4</a></link>
 </cd>
  <cd>
   <title>Item5</title>
   <start>15:15</start>
   <stop>16:00</stop>
   <link><a href="item5.hml">Item 5</a></link>
  </cd>
<catalog>
</textarea>

XSL

<textarea id="xsltcode" style="display:none">
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <html>
 <body>
 <h2>timetable</h2>
  <table border="1">
  <tr>
    <th style="text-align:left">Start</th>
    <th style="text-align:left">Stop</th>
    <th style="text-align:left">Title</th>
    <th style="text-align:left">Link</th>
  </tr>
  <xsl:for-each select="catalog/cd">
  <xsl:sort select="start"/>
  <tr>
    <td><xsl:value-of select="start"/></td>
    <td><xsl:value-of select="stop"/></td>
    <td><xsl:value-of select="title"/></td>
    <td><xsl:value-of select="link"/></td>
  </tr>
  </xsl:for-each>
  </table>
 </body>
 </html>
</xsl:template>
 </xsl:stylesheet>
</textarea>

脚本

<script>
function transformxml()
  {
  if (window.ActiveXObject)
   {
   // IE

  // XML:
  var xmltxt
  xmltxt=document.getElementById("xmlcode").value
   if (xmltxt=="")
    {
    alert("The XML is empty")
    return false;
    }
  xml=new ActiveXObject("MSXML2.DOMDocument");
  xml.async=false
  xml.loadXML(xmltxt)
  if (xml.parseError.errorCode!=0)
    {
     document.write("Error in XML<br><br>Line " + xml.parseError.line + ": " +      xml.parseError.reason);         
      alert("Error in XML\n\nLine " + xml.parseError.line + ": " + xml.parseError.reason);
      return false
    }
  // XSL:
  var xsltxt
  xsltxt=document.getElementById("xsltcode").value
  if (xsltxt=="")
    {
    alert("The XSLT is empty")
    return false
    }
  xsl=new ActiveXObject("Microsoft.XMLDOM")
  xsl.async=false
  xsl.loadXML(xsltxt)
  if (xsl.parseError.errorCode!=0)
    {
      document.write("Error in XSLT<br><br>Line " + xsl.parseError.line + ": " +   xsl.parseError.reason);                  
      alert("Error in XSLT\n\nLine " + xsl.parseError.line + ": " + xsl.parseError.reason);
      return false
      }

  // Transform:
  document.write(xml.transformNode(xsl));                   
 }
else if (document.implementation && document.implementation.createDocument)
{
// Mozilla
// XML:
var xmltxt
xmltxt=document.getElementById("xmlcode").value
if (xmltxt=="")
    {
    alert("The XML is empty")
    return false
    }
var doc=new DOMParser();
var xml=doc.parseFromString(xmltxt,"text/xml");
if (xml.documentElement.nodeName=="parsererror")
    {
    document.write("Error in XML<br><br>" + xml.documentElement.childNodes[0].nodeValue);
    alert("Error in XML\n\n" + xml.documentElement.childNodes[0].nodeValue);
    return false;
    }
// XSL:
var xsltPrs=new XSLTProcessor();
var xsltxt
xsltxt=document.getElementById("xsltcode").value
if (xsltxt=="")
    {
    alert("The XSLT is empty")
    return false
    }
xsl=doc.parseFromString(xsltxt,"text/xml");
if (xsl.documentElement.nodeName=="parsererror")
    {
    document.write("Error in XSLT<br><br>" + xsl.documentElement.childNodes[0].nodeValue);      
    alert("Error in XSLT\n\n" + xsl.documentElement.childNodes[0].nodeValue);
    return false;
    }

xsltPrs.importStylesheet(xsl);

// Transform:
var result=xsltPrs.transformToFragment(xml,document);
document.getElementById("result_output").appendChild(result);
 // document.replaceChild(result,window.document.childNodes[0])
  }
   else
  {
// No Browser support:
alert("Your browser does not support this example.");
    }
   } 
  </script>

由于

修改

马库斯·里克特 - &#34;您需要替换

  <xsl:value-of select="link"/>

通过

  <xsl:copy-of select="link/*"/>

因为前者只会将所选子树的文本表示复制到目标文档。所有标签都将丢失。后者将复制您的链接标记。我添加了一个/ *以确保标记本身不会显示在HTML中。最有可能的是,它们将被忽略,但它们也不是必需的。&#34;

1 个答案:

答案 0 :(得分:1)

您需要替换

<xsl:value-of select="link"/>

通过

<xsl:copy-of select="link/*"/>

因为前者只会将所选子树的文本表示复制到目标文档。所有标签都将丢失。后者将复制您的链接标记。