2012-12-27 41 views
0

有很多例子使用XSLT文件轉換XML文件到一個不同的格式,如下面的網站:XSLT變換

XslTransform myXslTransform = new XslTransform(); 
XsltSettings myXsltSettings = new XsltSettings(); 
myXsltSettings.EnableDocumentFunction = true; 
myXslTransform.Load("transform.xsl"); 
myXslTransform.Transform("input.xml", "output.xml"); 

然而,這是隻有部分答案,我希望能夠從Web表單獲取XML輸入數據,並將其用作輸入XML數據而不是'.xml'文件,但尚未找到任何具體示例。使用Visual Studio我看到Load方法接受XmlReader對象作爲參數,但我不知道如何使用表單和TextBox控件中的數據創建其中的一個。如果有人能提供一個使用表單數據而不是輸入文件來轉換XML的例子,那將會非常有幫助。

+0

只需使用'doc.LoadXml(theFormsItemValue)',其中'doc'是一個新的XmlDocument。然後使用以XMLDocument(或「XpathNavigator」)作爲參數的'Transform'的重載。 –

回答

0

創建一個類,並從你的表單數據回發期間填充這個類的一個實例,序列化(轉換爲XML)

這裏是控制檯例如你

using System; 
using System.Collections.Generic; 

using System.Text; 

using System.Xml.Serialization; 

namespace Stackoverflow 
{ 

    public class Program 
    { 

     static void Main(string[] args) 
     { 

      var p = new Person 
      { 
       FirstName = "Daniel", /// in your case you get it from the form 
       LastName = "Endeg" 

      }; 

      var x = new XmlSerializer(p.GetType()); 
      x.Serialize(Console.Out, p); 
      Console.WriteLine(); 
      Console.ReadLine(); 
     } 
    } 

    public class Person 
    { 
     public string FirstName { get; set; } 

     public string LastName { get; set; } 
    } 
} 
+0

這是一個很好的解決方案,感謝您花時間發佈這個答案,我認爲我提出的解決方案雖然有效,但稍微不太優雅。 –

0

請注意:XslTransform從.NET 2.0開始已經過時,您應該使用XslCompiledTransform代替。如果你想使用XslSettings然後確保你將它們傳遞給XslCompiledTransformLoad方法(例如http://msdn.microsoft.com/en-us/library/ms163425.aspx),只是簡單地創建它是沒有意義的。

至於解析XML你在字符串變量或屬性(如TextBoxText屬性)你有很多的選擇有,可以通過例如StringReader使用XmlReader

XslCompiledTransform proc = new XslCompiledTransform(); 
proc.Load("sheet.xsl"); 

using (StringReader sr = new StringReader(TextBox1.Text)) 
{ 
    using (XmlReader xr = XmlReader.Create(sr)) 
    { 
    proc.Transform(xr, null, Response.Output); 
    } 
} 

或者你可以創建一個XPathDocument或從字符串XmlDocumentXDocument並使用Transform方法,它有一個IXPathNavigable作爲第一個參數的重載。

+0

感謝您花時間回答我的問題。 –

-1

好吧,通過Visual Studio自動完成列出參數的構造函數和方法,我能夠完成上述問題的工作答案,在Xslt變換操作中使用字符串進行輸入和輸出。好極了。這個例子回答以下假設你有一個包含XSLT文本數​​據和輸入XML文本數據和輸出XML數據的三個字符串:

string XsltText; 
string InputXML; 
string OutputXml; 

// define the xslt from a string 
TextReader myXsltText = new StringReader(XsltText); 
XmlReader myXslt = new XmlTextReader(myXsltText); 

// define the input xml from a string 
TextReader myXmlText = new StringReader(InputXML); 
XmlReader myInputXml = new XmlTextReader(myXmlText); 

// define the output XmlWriter for the results of the transform 
TextWriter myOutputXmlTextWriter = new StringWriter(); 
XmlWriter myOutputXml = new XmlTextWriter(myOutputXmlTextWriter); 

XslCompiledTransform myXslTransform = new XslCompiledTransform(); 
XsltSettings myXsltSettings = new XsltSettings(); 
myXsltSettings.EnableDocumentFunction = true; 
myXslTransform.Load(myXslt); 
myXslTransform.Transform(myInputXml, myOutputXml); 

// the result from the transform comes from the TextWriter object 
OutputXml = myOutputXmlTextWriter.ToString(); 

// clean up writers 
myOutputXml.Flush(); 
myOutputXmlTextWriter.Close(); 
myOutputXml.Close(); 

爲了得到這個代碼與Web表單的工作,你所要做的就是讓來自表單元素(控件)的值(Text)的字符串,對於輸入XMl和Xslt,您可以使用TextBox控件,並顯示可以使用標籤的結果,這些都非常有用,如果有人有更好的答案,請感覺免費讓我知道。

+0

-1:1)不要使用'new XmlTextReader'。使用'XmlReader.Create'。另外,你需要把你的讀者和作者等放在'使用'塊中。 –