2015-04-09 3 views
0

Я разработчик C# только с 1-летним опытом. Я столкнулся с проблемой создания сложного запроса xml для веб-службы.Создание комплекса xml strucure

Я получил файл XSD & образец xml запросов. Теперь я должен заполнить его правильными данными и вызвать веб-сервис. У меня небольшой опыт создания небольших xml-структур. Что я делаю, это использование конкатенации строк/xml document object/xml writer. Эти методы хороши с небольшими структурами, но с большей структурой нелегко написать каждый тег, используя вышеописанные объектные модели.

Пожалуйста, дайте мне знать лучший способ создания сложных структур xml с C#. Благодарю.

+2

попробовать это: http://stackoverflow.com/questions/284324/how-can-i-build-xml-in-c – deeptowncitizen

+1

Существует не хватает информации здесь, чтобы помочь вам. Пожалуйста, покажите код, который вы создали, и примеры того, где он не работает, включая ошибки. – paqogomez

+0

Я бы предложил добавить атрибуты xml к вашим классам, а затем использовать XmlSerializer – MIke

ответ

1

Linq to Xml - очень краткий способ выразить Xml из запросов linq.

Вот как вы можете построить дерево Xml в LINQ to 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> 

Джозефа Albahari великие C# библия C# 5.0 In a Nutshell имеет много примеров, включая главу о "Linq в XML". Его бесплатное приложение LinqPad поставляется с некоторыми хорошими примерами, подобными приведенным ниже из главы 10.

Примеры ниже строят XML непосредственно из операторов Linq. Вы можете видеть, что он дает вам более прямой контроль над выходным 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) 
      ) 
     ) 
    ) 
+0

Но мой xml является сложным, и у него слишком много дочернего объекта в стороне. Поэтому, если я попытаюсь использовать этот подход, потребуется много времени и нужно внимательно следить за отсутствующими тегами. Является ли это лучшим способом создания xml-структуры (или сопоставления с объектной моделью C#) или существует какой-либо простой способ, кроме создания вручную. –

+0

Другая возможность заключается в использовании сериализации сложных объектов, описанных выше в ссылке DeepTownCitizens. – WillC

+0

Добавлены более сложные версии, созданные непосредственно из операторов linq. – WillC

Смежные вопросы