1

XSLT/Xalan を使用して、ある XML ファイルを別の XML ファイルに変換しています。そうするうちに、XSLT スタイルシートを作成しているときに、生成したいターゲット ファイルのノードをハードコーディングしていることに気付きました。これは奇妙に思えました。

XSDを使用してターゲットファイルをプログラムで生成する方法はありますか? 基本的に、持っている XSD を使用してファイルのスケルトンを作成し、ソース ファイルに対してスタイルシートを実行したいと考えています。次に、そこから見つけた値を、生成されたファイルの適切な場所に挿入します。

これを行う方法はありますか?それとも、代わりに XQuery がこのような機能を提供するのでしょうか?

4

2 に答える 2

1

DataSet をシリアル化し、XSLT を使用して変換する方法を尋ねているようです。その場合は、次の方法で実行できます。

DataSet を XML にシリアライズする

DataTable table = new DataTable();     
System.IO.StringWriter writer = new System.IO.StringWriter(); 

//notice that we're ignoring the schema so we get clean XML back 
//you can change the write mode as needed to get your result 
table.WriteXml(writer, XmlWriteMode.IgnoreSchema, false); 

string dataTableXml = writer.ToString(); 

読み取り可能な形式で表示するには、XML を XSL トランスフォーマーに渡すことをお勧めします。XSL トランスフォーマーを使用して、必要に応じて XML を解析し、出力を操作できます。

XSLT 変換を DataSet に適用する

http://msdn.microsoft.com/en-us/library/8fd7xytc%28v=vs.71%29.aspx#Y289

XSL トランスフォーマーの使用方法を説明するために作成した簡単な例を次に示します。私はそれをテストしていませんが、かなり近いはずです:

DataSet ds = new DataSet(); 
StringBuilder sbXslOutput = new StringBuilder();  

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

    transformer.Transform(new XmlDataDocument(ds), args, xslWriter); 
} 

string dataSetHtml = sbXslOutput.ToString(); 

XSLT を使用して XML を HTML としてフォーマットする

XSLT を使用して XML を HTML テーブルに変換する例を次に示します。シリアライズされた DataSet で使用できるように、かなり簡単に採用できるはずです。

これが、XML にシリアル化された DataSet であるとしましょう。

<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>  

DataSet を 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> 
于 2011-10-14T19:19:22.180 に答える
0

XSLT 2.0 では、(ソース ドキュメントとターゲット ドキュメントの両方の) スキーマ情報を利用して、システムがスタイルシートの正確性をチェックできるようにすることができます。スキーマ。しかし、スキーマを使用してスタイルシートの作成プロセスを自動化するツールについては知りません。一部の XSLT 編集ツール (IDE) は、スキーマ情報を使用して構文指向の編集を支援している可能性があります。

于 2011-10-14T20:44:45.983 に答える