使用XSLT从XML中选择数据?

时间:2011-01-03 16:27:37

标签: xml xslt

好的,我有product.xml和product.xsl

在product.xml中说我有两位数据

<productInfo productID="Product1">
<title>Product One</title>
</productInfo>

<productInfo productID="Product2">
<title>Product Two</title>
</productInfo>

在我的product.xsl中,根据productID参数,是否只能显示一组数据?

因此,如果product.xml加载为 product.xml?productID = Product1 ,我该如何才能显示Product1数据?

我尝试从网址获取productID的值,但这不起作用..

<xsl:param name="productID" />
<xsl:value-of select="$productIDParam"/>

通过使用XML和XSLT,我正在尝试做什么?

2 个答案:

答案 0 :(得分:1)

  

因此,如果将product.xml加载为    product.xml?productID = Product1

     怎么可以   我只显示Product1数据?

     

我试图获得productID的值   从URL但这不起作用..

<xsl:param name="productID" />
<xsl:value-of select="$productIDParam"/> 
     

我正在尝试做什么   只使用XML和XSLT可以吗?

在启动转换之前,您需要获取“productId”查询变量的值,然后将此值作为全局级外部参数的值传递。

不同的XSLT处理器具有不同的API来实现此目的。例如,.NET XslCompiledTransform 处理器使用作为 XsltArgumentList 的参数传递的Transform()类的实例来实现此目的方法

以下是完整的代码示例

using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;

public class Sample {

   public static void Main() {

      // Create the XslCompiledTransform and load the style sheet.
      XslCompiledTransform xslt = new XslCompiledTransform();
      xslt.Load("discount.xsl");

      // Create the XsltArgumentList.
      XsltArgumentList argList = new XsltArgumentList();

      // Calculate the discount date.
      DateTime orderDate = new DateTime(2004, 01, 15);
      DateTime discountDate = orderDate.AddDays(20);
      argList.AddParam("discount", "", discountDate.ToString());

      // Create an XmlWriter to write the output.             
     XmlWriter writer = XmlWriter.Create("orderOut.xml");

     // Transform the file.
     xslt.Transform(new XPathDocument("order.xml"), argList, writer);
     writer.Close();

  }

}

因此,您需要阅读XSLT处理器的文档,以获取有关如何将外部参数传递给转换的说明。

答案 1 :(得分:0)

XSLT允许您使用顶级xsl:param元素定义全局参数,这些元素应该从XSLT处理器外部设置,主要是使用XSLT处理器的API进行编程。如果要读取URL中的查询字符串参数,则需要使用您选择的客户端或服务器端语言(即主要是客户端上的Javascript或各种框架/语言,如ASP.NET,Servlet,服务器上的PHP)然后使用暴露于该语言或该框架的任何API运行转换。这样您就可以将查询字符串参数传递给XSLT样式表。