2

<%=person.LastName %>このように XML 文字列のような変数を使用することは可能ですか?

XElement letters = new XElement("Letters");

XElement xperson = XElement.Parse("<Table><Row><Cell><Text>
   <Segment>Dear <%=person.Title%> <%=person.FirstName%> <%=person.LastName%>,
   </Segment></Text></Cell></Row>...");

foreach (Person person in persons){
   letters.Add(xperson)
}

可能であれば、ノードを手動で追加するために XElement と XAttribute を使用できないため、命の恩人になります。複数のテンプレートがあり、それらは頻繁に変更されます (オンザフライで編集)。

これができない場合は、XML のテンプレートを使用できるようにする別の方法を考えてもらえますか?

VB http://aspalliance.com/1534_Easy_SQL_to_XML_with_LINQ_and_Visual_Basic_2008.6で可能なように見えます

4

1 に答える 1

1

これは、 XML リテラルとして知られる VB.NET の排他的な機能です。VB9.0で追加されました。C# は現在、この機能をサポートしていません。Microsoft は、将来的に言語間のギャップを埋める意図を表明していますが、この機能がすぐに C# に適用されるかどうかは明らかではありません。

あなたの例は私にははっきりしていないようです。値が現在のオブジェクトforeachにバインドされているため、実際の XML を解析する前にループが必要です。Personたとえば、XML リテラルの VB の例を次に示します。

Dim xml = <numbers> 
            <%= From i In Enumerable.Range(1, 5)
                Select <number><%= i %></number>
            %>
          </numbers>

For Each e In xml.Elements()
    Console.WriteLine(e.Value)
Next

上記のスニペットは、次の XML を構築します。

<numbers>
  <number>1</number>
  <number>2</number>
  <number>3</number>
</numbers> 

1, 2, 3次に、コンソールに書き込みます。

XML を動的に構築するように C# コードを変更できない場合は、XML テンプレートをトラバースし、属性と要素の所定のフィールドを検索して、必要に応じて値を設定するコードを記述できます。つまり、各ノードのすべての属性と要素を反復処理し、テンプレート フィールド名をチェックする switch ステートメントをいくつか用意する必要があります。テンプレートフィールドに遭遇し、現在属性を反復している場合は、属性が設定されている方法で設定しますが、要素を反復している場合は、要素が設定されている方法で設定します。これはおそらく最も効率的なアプローチではありませんが、1 つの解決策です。

最も簡単な解決策は、VB.NET を使用することです。いつでもスタンドアロン プロジェクトとして開発し、C# プロジェクトから dll への参照を追加し、データを VB.NET クラスに渡し、最終的な XML を返すようにすることができます。

編集: 明確にするために、VB.NET を使用しても、テンプレートを更新する必要はありません。レイアウトを XML リテラルとして簡単に指定できます。そのため、レイアウトが変更されたら、VB でコードを更新する必要があります。テキスト ファイルから XML テンプレートを読み込んで、フィールドがそのようにバインドされることを期待することはできません。コードを 1 回記述してさまざまなテンプレートを読み取ることができる真に動的なソリューションについては、私の最初の提案がより適切です。

于 2010-10-03T02:18:40.033 に答える