2012-07-27 50 views
2

以下代碼工作並從本地磁盤獲取XSL和XML,並將轉換後的XML返回給變量Xtransoutput。vb 2010 XslCompiledTransform需要從字符串轉換而不是從URI磁盤文件

Dim XmlInputPath As String = "C:\Any.XML" 
Dim XslInputPath As String = "C:\Any.XSL" 

Dim StringWriter As New System.IO.StringWriter 
Dim XsltTransformation As New XslCompiledTransform(True) 
Dim XsltArgumentList As New XsltArgumentList 
Dim Xtransoutput As String = Nothing 

XsltTransformation.Load(XslInputPath) 
XsltTransformation.Transform(XmlInputPath, XsltArgumentList, StringWriter) 
Xtransoutput = StringWriter.ToString 

我的問題是,我有兩個XML和單獨字符串的XSL已經,他們不是在磁盤上,我不無法寫入到磁盤出於安全原因。有關如何讓這些工作從字符串而不是從磁盤文件工作的任何建議?

TIA!

回答

3

這裏是一個C#示例 - 將其轉換爲VB是留給讀者做練習:))

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

namespace XsltInMemory 
{ 
    class XsltInMemory 
    { 
     static void Main(string[] args) 
     { 
      XmlDocument doc = new XmlDocument(); 
      XslCompiledTransform xslt = new XslCompiledTransform(); 

      doc.LoadXml("<t/>"); 

      StringReader sr = new StringReader(

@"<xsl:stylesheet version='1.0' 
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> 
<xsl:output omit-xml-declaration='yes' indent='yes'/> 

<xsl:template match='node()|@*'> 
    <xsl:copy> 
    <xsl:apply-templates select='node()|@*'/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet>" 

      ); 

      MemoryStream ms = new MemoryStream(); 

      xslt.Load(new XmlTextReader(sr)); 

      xslt.Transform(doc, null, ms); 

      ms.Flush(); 
      ms.Position = 0; 

      StreamReader sr2 = new StreamReader(ms); 

      Console.Write(sr2.ReadToEnd()); 
     } 
    } 
} 
+0

謝謝!!!!轉換中的練習進行得很順利! – newby 2012-07-30 13:14:26

+0

@newby:不客氣。 – 2012-07-30 14:15:02

相關問題