XsltArgumentList.AddExtensionObject 方法

本文介绍如何通过XsltArgumentList将自定义扩展对象添加到XSLT转换过程中,并提供了一个具体的示例,展示了如何使用扩展对象更新XML文档中的书籍价格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将新对象添至 XsltArgumentList 并将其与命名空间 URI 关联。

命名空间:System.Xml.Xsl 程序集:System.Xml(在 system.xml.dll 中)

C#
public void AddExtensionObject (
    string namespaceUri,
    Object extension
)

 

参数
namespaceUri

要与对象关联的命名空间 URI。若要使用默认命名空间,请指定空字符串。

extension

要添至列表的对象。

异常类型条件

ArgumentException

namespaceUri 是 空引用(在 Visual Basic 中为 Nothing) 或 http://www.w3.org/1999/XSL/Transform

namespaceUri 已经具有与其关联的扩展对象。

SecurityException

调用方没有足够的权限调用此方法。

params 关键字,它允许传递未指定数量的参数,当前不允许此操作。使用以 params 关键字定义的方法的 XSLT 样式表将不会正确工作。有关更多信息,请参见 params(C# 参考)

给调用者的说明 调用此方法需要 FullTrust。有关更多信息,请参见 代码访问安全性

在下面的示例中,样式表使用 XSLT 扩展对象来转换书价。

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 stylesheet.
    XslCompiledTransform xslt = new XslCompiledTransform();
    xslt.Load("prices.xsl");

    // Load the XML data file.
    XPathDocument doc = new XPathDocument("books.xml");

    // Create an XsltArgumentList.
    XsltArgumentList xslArg = new XsltArgumentList();
         
    // Add an object to calculate the new book price.
    BookPrice obj = new BookPrice();
    xslArg.AddExtensionObject("urn:price-conv", obj);

    // Transform the file.
    xslt.Transform("books.xml", xslArg, XmlWriter.Create("output.xml"));

  }

  // Convert the book price to a new price using the conversion factor.
  public class BookPrice{

    private decimal newprice = 0;
        
    public decimal NewPriceFunc(decimal price, decimal conv){
       decimal tmp = price*conv;
       newprice = decimal.Round(tmp, 2);
       return newprice;
    }
  }
}

该示例将下列数据文件用作输入。

books.xml

<bookstore>
  <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

prices.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:myObj="urn:price-conv">

<!--Price conversion factor-->
<xsl:param name="conv" select="1.15"/>

  <xsl:template match="bookstore">
  <bookstore>
  <xsl:for-each select="book">
    <book>
    <xsl:copy-of select="node()"/>
       <new-price>
          <xsl:value-of select="myObj:NewPriceFunc(./price, $conv)"/>        
       </new-price>
    </book>
  </xsl:for-each>
  </bookstore>
  </xsl:template>
</xsl:stylesheet>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值