在XML文件中动态传递href

时间:2010-08-10 20:05:54

标签: xml xslt

如何在行

中动态指定href值
<?xml-stylesheet type="text/xsl" href="first.xsl"?>

在xml中?

我想动态地替换“first.xsl”。

感谢您的帮助。 ==================道歉搞砸了这个/让你难以帮助====

我的XML是:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="first.xsl"?>
<WinData records="1" fields="4">
<record id="1">
    <Name type="82">January</Name>
    <Dept type="323">19</Dept>
    <InceptionDate type="82">01/01/2010</InceptionDate>
    <Salary type="645">3729.71</Salary>
</record>
<!-- Created from D:\AJAY\C#\VS2010\SBWA\XML -->
</WinData>

XSL是:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <h2>Sub Selection of Data</h2>
    <table border="0">
      <tr bgcolor="#9acd32">
        <th>Name</th>
        <th>Dept</th>
        <th>InceptionDate</th>
        <th>Salary</th>
      </tr>
      <xsl:for-each select="WinData/record" >
      <xsl:sort select="./Name"/>
      <xsl:sort select="./Dept"/>
      <xsl:if test="Salary>100"> 
      <tr>
        <td><xsl:value-of select="Name"/></td>
        <td><xsl:value-of select="Dept"/></td>
        <td><xsl:value-of select="InceptionDate"/></td>
        <td><xsl:value-of select="Salary"/></td>
      </tr>
      </xsl:if>   
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

我的具体问题/目标:

  1. 如何合并iHeartGreek提供的代码段?
  2. 有没有办法将“替换”xsl(代码段中的newLink.xsl)作为参数传递?

2 个答案:

答案 0 :(得分:1)

两种可行的解决方案。

1)双程转换。您可以输出如下PI:

<xsl:processing-instruction name="xml-stylesheet">
    <xsl:value-of select="concat('type=&quot;text/xsl&quot; href=&quot;',
                                 $whatever,
                                 '&quot;')"/>
</xsl:processing-instruction>

2)使用“填充”模式(或“填充空白”,作为Dimitre调用)和元数据URI来获取fn:document()的布局。看这个Dynamically decide which XSL stylesheet to use

注意:PI是输入树的一部分。无论此输入树是来自解析文档还是由DOM API构建或以何种方式构建,对于XSLT处理器,只有“PI”类型的“静态”节点具有“最终”字符串值。

答案 1 :(得分:0)

您可以使用XSLT文档转换XML数据。

使用:(假设该节点称为“链接”)

<xsl:template match="link[.='first.xsl']">
    <xsl:element name="link">
      <xsl:text>newLink.xsl</xsl:text>
    </xsl:element>
</xsl:template>