簡體   English   中英

LINQ to SQL to XML(在C#中使用XML文字)

[英]LINQ to SQL to XML (using XML literals in C#)

是否可以通過這種方式在XML字符串中使用像<%=person.LastName %>這樣的變量?

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

這是VB.NET獨有的功能,稱為XML文字 它是在VB 9.0中添加的。 C#當前不支持此功能。 盡管Microsoft表示將來有意彌合這兩種語言之間的鴻溝 ,但尚不清楚此功能是否會很快在C#中使用。

您的例子對我來說似乎並不明確。 由於將值綁定到當前的Person對象,因此您在解析實際的XML之前希望先進行foreach循環。 例如,這是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寫入控制台。

如果您不能修改C#代碼以動態地構建XML,那么也許您可以編寫遍歷XML模板並在屬性和元素中搜索預定字段的代碼,然后根據需要設置值。 這意味着您將必須遍歷每個節點中的所有屬性和元素,並具有一些用於檢查模板字段名稱的switch語句。 如果遇到模板字段並且當前正在迭代屬性,則可以使用設置屬性的方式對其進行設置,而如果要迭代元素,則可以使用設置元素的方式對其進行設置。 這可能不是最有效的方法,而是一種解決方案。

最簡單的解決方案是使用VB.NET。 您始終可以將其開發為獨立項目,從C#項目添加對dll的引用,將數據傳遞給VB.NET類,並使其返回最終的XML。

編輯:澄清一下,使用VB.NET不會繞過更新模板的需要。 它使您可以更輕松地將布局指定為XML文字。 因此,一旦布局更改,仍需要在VB中更新代碼。 您無法從文本文件加載XML模板,並且期望字段以這種方式綁定。 對於真正的動態解決方案,它允許您編寫一次代碼並閱讀不同的模板,因此我的第一個建議更合適。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM