我是一名只有1年经验的C#开发人员。我面临着为Web服务创建复杂xml请求的问题。
我收到了XSD文件&示例xml请求。现在我要使用正确的数据填充它并调用Web服务。 我在创建小型xml结构方面有一点经验。 我正在做的是使用字符串concatination / xml文档对象/ xml编写器。 这些方法适用于小型结构,但结构较大,使用上述对象模型编写每个标签并不容易。
请告诉我从C#创建复杂xml结构的最佳方法。感谢。
答案 0 :(得分:1)
Linq to Xml是一种非常简洁的方式来表达来自linq查询的Xml。
以下是如何在LINQ to Xml中构建一个Xml树(来自Microsoft:https://msdn.microsoft.com/en-us/library/bb387089.aspx)。
XElement contacts =
new XElement("Contacts",
new XElement("Contact",
new XElement("Name", "Patrick Hines"),
new XElement("Phone", "206-555-0144"),
new XElement("Address",
new XElement("Street1", "123 Main St"),
new XElement("City", "Mercer Island"),
new XElement("State", "WA"),
new XElement("Postal", "68042")
)
)
);
输出:
<Contacts>
<Contact>
<Name>Patrick Hines</Name>
<Phone>206-555-0144</Phone>
<Address>
<Street1>123 Main St</Street1>
<City>Mercer Island</City>
<State>WA</State>
<Postal>68042</Postal>
</Address>
</Contact>
</Contacts>
Joseph Albahari的伟大的c#bible C# 5.0 In a Nutshell有一些很好的例子,包括关于&#34; Linq to XML&#34;的章节。他的免费LinqPad应用程序附带了一些很好的例子,如下面第10章中的这些例子。
以下示例直接从Linq语句构建XML。您可以看到它比直接序列化更直接地控制输出XML,并简化了创建更复杂的XML结构。
// Query Example 1
IQueryable<XElement> sqlQuery =
from c in Customers
select
new XElement ("customer", new XAttribute ("id", c.ID),
new XElement ("name", c.Name),
new XElement ("buys", c.Purchases.Count)
);
var customers = new XElement ("customers", sqlQuery);
// Query Example 2
new XElement ("customers",
from c in Customers
let lastBigBuy = (
from p in c.Purchases
where p.Price > 1000
orderby p.Date descending
select p
).FirstOrDefault()
select
new XElement ("customer", new XAttribute ("id", c.ID),
new XElement ("name", c.Name),
new XElement ("buys", c.Purchases.Count),
new XElement ("lastBigBuy",
new XElement ("description",
lastBigBuy == null ? null : lastBigBuy.Description),
new XElement ("price",
lastBigBuy == null ? 0m : lastBigBuy.Price)
)
)
)