【问题标题】:Getting Variable values out of and XSLT file从 XSLT 文件中获取变量值
【发布时间】:2011-01-17 17:28:59
【问题描述】:

我想知道是否有办法从 XSL 文件中获取参数或变量值。例如,如果我有以下内容:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:variable name="username" select ="usertest"/>
  <xsl:variable name="password" select ="pass"/>
  <!-- ... -->
</xsl:stylesheet>

我想从 XSL 中读取 usernamepassword 值并将它们用于身份验证。我正在使用 ASP.Net 和 C# 对 XML 文件执行实际转换。

有人可以与我分享允许我从 ASP.NET/C# 读取 XSL 变量的代码吗?提前感谢您的帮助。

【问题讨论】:

    标签: c# asp.net xslt


    【解决方案1】:

    这很容易。 XSL 文件本身就是 XML,因此您可以这样对待它们。

    XmlDocument xslDoc = new XmlDocument();
    xslDoc.Load("myfile.xsl");
    
    XmlNamespaceManager nsMgr = new XmlNamespaceManager(xslDoc.NameTable);
    nsMgr.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");
    
    XmlNode usrNode = xslDoc.SelectSingleNode("/xsl:stylesheet/xsl:variable[@name='username']", nsMgr);
    XmlNode pwdNode = xslDoc.SelectSingleNode("/xsl:stylesheet/xsl:variable[@name='password']", nsMgr);
    
    string usr = usrNode.Attributes["select"].Value;
    string pwd = pwdNode.Attributes["select"].Value;
    

    【讨论】:

    • 太好了..很高兴知道.. +1 :-)
    【解决方案2】:

    您的问题是(编辑:是)缺少实际代码,但从描述来看,您正在寻找的是 XPath。 XSL 会将一个 XML 文档转换为另一个 XML 文档,然后您可以使用 XPath 查询生成的 XML 以获取所需的值。

    这篇 Microsoft 知识库文章包含有关如何在 C# 中使用 XPath 的信息:

    http://support.microsoft.com/kb/308333

    【讨论】:

      【解决方案3】:

      感谢 Everone。这是最终奏效的方法:

      用于测试目的的客户端(带有 vbscript 的 asp):

      <%
      
      //Create Object
      Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
      //Set up the object with the URL
      'xmlhttp.open "POST" ,"http://localhost/ASP_Test/receiveXML.asp",False
      
      //Create DOM Object
      Set xmldom = CreateObject("Microsoft.XMLDOM")
      xmldom.async = false
      
      //Load xls to send over for transform
      xmldom.load(Server.MapPath("/ASP_Test/masterdata/test.xsl"))
      
      //Send transform file as DOM object
      xmlhttp.send xmldom
      %>
      //////////////////////////////////////////////////////////////////////////
      On the Server Side: (aspx with C#) Accepts xslt and process the transform:
      
      //file path for data xml
      String xmlFile = ("\\masterdata\\test.xml");
      //file path for transformed xml
      String xmlFile2 = ("\\masterdata\\out.xml");
      
      
      XmlTextReader reader = new XmlTextReader(Request.InputStream);
      Transform(xmlFile, reader, xmlFile2);
      
       public static string Transform(string sXmlPath, XmlTextReader xslFileReader, string outFile)
              {
                  try
                  {
                      //load the Xml doc
                      XPathDocument myXPathDoc = new XPathDocument(sXmlPath);
                      XslCompiledTransform myXslTrans = new XslCompiledTransform();
      
                      //load the Xsl
                      myXslTrans.Load(xslFileReader);
      
                      //create the output stream
                      XmlTextWriter myWriter = new XmlTextWriter
                          (outFile, null);
      
                      //do the actual transform of Xml
                      myXslTrans.Transform(myXPathDoc, null, myWriter);
      
                      myWriter.Close();
                      return "Done";
                  }
                  catch (Exception e)
                  {
                      return e.Message;
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        • 2018-07-21
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多