2011-10-19 14 views
1

私は最初に単純なxsltを作成することに固執しています。 XMLオブジェクトを変換するために使用するスタイルシートです.2番目は、実際にはxsltスタイルシートを使用して変換を行うことに固執しています。C#でXSLTを使用してXMLをHTMLに変換するにはどうすればよいですか?

背景は以下の通りです:

私は基本的に3つの入力を持つ小型形状であるWebパーツを持っています。これらの入力は、その後、送信され、Http GET要求によって外部APIを照会するために使用されます。クエリの結果は、XML形式の別のページに表示されます。私が今必要とするのは、xmlをhtmlに変換してXMLの代わりに出力することです。私は現在持っている何

私は、HTTP GETリクエストにより、APIのクエリの結果を保持している文字列変数「TMP」を持っています。クエリの結果を変数に格納されますし、私が使用して結果を表示することができています(コード:与えられたが、この特定のケースのために最も関連する全コードの小さなスニペットです)私はその後、使用

StreamReader reader = new StreamReader(response.GetResponseStream()); 
string tmp = reader.ReadToEnd(); 

Response.Write(tmp); 
Response.End(); 

そのようなXMLドキュメントオブジェクトとして「TMP」:私のプロジェクトに

XmlDocument doc = new XmlDocument(); 
doc.Load(tmp); 

私はその後、形質転換のために使用されるXSLTファイルを追加しました。上記のように私は、XMLドキュメントオブジェクトを作成している

  1. :私はこだわっていますのはここ

    です。プロジェクトに追加したXSLTファイルを使用して変換を実行するにはどうすればよいですか?

  2. 出力をHTMLに変換するには、実際にどのように変換するのですか。

私は今一週間の最高の部分のためにこれで苦労しています。

答えて

3

string tmp = "<XML DATA>"; 
StringBuilder sbXslOutput = new StringBuilder(); 

using (XmlWriter xslWriter = XmlWriter.Create(sbXslOutput)) 
{ 
    XslCompiledTransform transformer = new XslCompiledTransform(); 
    transformer.Load("transformer.xsl"); 
    XsltArgumentList args = new XsltArgumentList(); 

    XmlDataDocument doc = new XmlDataDocument(); 
    doc.Loadxml(tmp); 

    transformer.Transform(doc, args, xslWriter); 
} 

string dataSetHtml = sbXslOutput.ToString(); 

のは、これはあなたのXMLであるとしましょう:

<RecentMatter> 
    <UserLogin>PSLTP6\RJK</UserLogin> 
    <MatterNumber>99999-2302</MatterNumber> 
    <ClientName>Test Matters</ClientName> 
    <MatterName>DP Test Matter</MatterName> 
    <ClientCode>99999</ClientCode> 
    <OfficeCode/> 
    <OfficeName/> 
    <Billable>true</Billable> 
    <ReferenceId/> 
    <LastUsed>2011-08-23T23:40:24.13+01:00</LastUsed> 
</RecentMatter> 
<RecentMatter> 
    <UserLogin>PSLTP6\RJK</UserLogin> 
    <MatterNumber>999991.0002</MatterNumber> 
    <ClientName>Lathe 1</ClientName> 
    <MatterName>LW Test 2</MatterName> 
    <ClientCode/> 
    <OfficeCode/> 
    <OfficeName/> 
    <Billable>true</Billable> 
    <ReferenceId/> 
    <LastUsed>2011-07-12T16:57:27.173+01:00</LastUsed> 
</RecentMatter> 
<RecentMatter> 
    <UserLogin>PSLTP6\RJK</UserLogin> 
    <MatterNumber>999991-0001</MatterNumber> 
    <ClientName>Lathe 1</ClientName> 
    <MatterName>LW Test 1</MatterName> 
    <ClientCode/> 
    <OfficeCode/> 
    <OfficeName/> 
    <Billable>false</Billable> 
    <ReferenceId/> 
    <LastUsed>2011-07-12T01:59:06.887+01:00</LastUsed> 
</RecentMatter> 
</NewDataSet> 

は、より多くの情報のためにも、これを参照してください。

XMLをHTMLに変換するXSLTスクリプトを次に示します。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
     <table border="1"> 
     <tr> 
      <th>User Login</th> 
      <th>Matter Number</th> 
      ... 
     </tr> 
     <xsl:for-each select="NewDataSet/RecentMatter"> 
      <tr> 
      <td> 
       <xsl:value-of select="UserLogin"/> 
      </td> 
      <td> 
       <xsl:value-of select="MatterNumber"/> 
      </td> 
      ... 
      </tr> 
     </xsl:for-each> 
     </table> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Jamesさんに感謝します。これはまさに私が探しているものです。私はこれを今すぐ行って、うまくいけばこの問題を解決します。多くのありがとう –

+0

素晴らしい。あなたが満足している場合、答えを受け入れることを忘れないでください。 –

+0

こんにちはJamesさん、at:string tmp = ""; tmpはxmlデータをすでに保持/格納している文字列です。あなたが示唆したようにxmlデータを実際にアセンブルしなくてもそのまま使用することができますか? –

1

あなたは、メモリストリームに書き込むことができます。

MemoryStream mStream = new MemoryStream(); 
mXslt.Transform(new XPathDocument(new XmlNodeReader(mXml)), null, mStream); 
mStream.Position = 0; 
StreamReader mReader = new StreamReader(mStream); 
string mOutput = mReader.ReadToEnd(); 

使用XPathDocumentオブジェクトXslCompiledTransformではを。それらはXslTransformおよびXmlDocumentよりはるかに高速です。 XmlDocumentを使用してXMLを作成した場合でも、変換のためにXPathDocumentに変換します。ここではXMLをHTMLに変換するためにXSLTを使用する方法の簡単な例です Simplest way to transform XML to HTML with XSLT in C#?

+0

ASPの場合。NETでは、HTTP応答ストリームに直接変換を行うことができます。 'HttpResponse.Output'は' TextWriter'であり、 'XslCompiledTransform.Transform'のオーバーロードのいくつかは出力パラメータのための' TextWriter'を取ります。 – Richard

+0

あなたの提案をお寄せいただきありがとうございます –

+0

+1、理由は何ですか?私はプロジェクトで多くの変換を行う必要があり、大きなファイルを使用するときにパフォーマンスの問題が発生することがあります。 – int32

関連する問題