2015-08-03 2 views
0

У меня есть класс C#, который наследуется от другого объекта, который содержит списки строк. структура похожа на это:Создание XML-документа с помощью XElement с использованием C#

public class BeneficiaryScreening 
{ 
    public int Id { get; set; } 
    public DateTime ProcessedDate { get; set; } 
    public string FileName { get; set; } 
    public int LineCountFile { get; set; } 
    public int LineCountHits { get; set; } 
    public string SearchLine { get; set; } 
    public Entity Entity { get; set; } 

} 
[Serializable] 
public class Entity 
{ 
    public string MessageId { get; set; } 
    public string Id { get; set; } 
    public string ItemType { get; set; } 
    public string DateListed { get; set; } 
    public string Gender { get; set; } 
    public List<string> Names { get; set; } 
    public List<string> Countries { get; set; } 
} 

я заполнить класс, используя Чудной, и теперь необходимо преобразовать результаты в XML для использования с другим приложением.

Я могу создать документ отлично, если я использую только поля значения sinlge, но мне не удается создать правильный XML для всех элементов списка.

код у меня до сих пор:

XElement element = 
      new XElement("Root", 
       (from bene in xmlDataSet 
        select new XElement("Item", 
          new XElement("Id", bene.Id), 
          new XElement("ProcessedDate", bene.ProcessedDate), 
          new XElement("FileName", bene.FileName), 
          new XElement("LineCountFile", bene.LineCountFile), 
          new XElement("LineCountHits", bene.LineCountHits), 
          new XElement("Line", bene.SearchLine), 
         new XElement("Entity", 
           new XElement("Names",new XElement("name", (from name in bene.Entity.Names 
           select new XElement("name", name))))) 
          )) 
        ); 

Моя проблема, в том, что все выглядит нормально, пока я не начну перебрать имена, которые производит следующее:

<Entity> 
    <Names> 
    <name> 
     <name>Some Name</name> 
     <name>Some Name</name> 
    </name> 
    </Names> 
</Entity> 

Может кто-то указал мне на это направление, имея возможность создавать элементы списка, например:

<Entity> 
    <Names> 
    <name> 
     <value>Some Name</value> 
    </name> 
    <name> 
     <value>Some Name</value> 
    </name> 
    </Names> 
</Entity> 

UPDATE ОК, как ваши примеры работали в целях создания XML, отсюда и голосование, но моя внешняя программа не может проходить через подузлы. Поэтому мне нужно создать каждое имя/страну в одном XElement, разделенном запятой.

new XElement("Entity",new XElement("Names", bene.Entity.Names.Select(name=>   
name))), 
new XElement("Countries", bene.Entity.Countries.Select(country => country)) 

Таким образом, все, что мне нужно, это пространство между значениями

ответ

2

Вам просто нужно создать новый XElement под названием value для каждого имени:

select new XElement("name", new XElement("value", name)) 

Как и в сторону, Я бы не Не используйте выражение запроса для этого - я бы просто использовал:

new XElement("Entity", 
    new XElement("Names", 
     new XElement("name", 
      bene.Entity.Names 
       .Select(name => new XElement("name", new XElement("value", name)) 
     ) 
    ) 
+0

См редактирование Джон, который продолжается от вашей рекомендации – CSharpNewBee

+0

@CSharpNewBee: Вы должны спросить, что как новый вопрос - как Четин, и я ответил на вопрос, который вы просили, и постоянный «Ну вы ответили на мой вопрос о X, но на самом деле я хочу, чтобы Y "не работал на Stack Overflow. –

+0

Это связано с этим вопросом, хотя, но я вижу вашу точку зрения. Cheers – CSharpNewBee

1

У вас нет немного избыточности там? имя внутри тег имени? Это то, что вы действительно хотите? Или просто назовите список элементов внутри имен?

XElement element = 
      new XElement("Root", 
       (from bene in xmlDataSet 
        select new XElement("Item", 
          new XElement("Id", bene.Id), 
          new XElement("ProcessedDate", bene.ProcessedDate), 
          new XElement("FileName", bene.FileName), 
          new XElement("LineCountFile", bene.LineCountFile), 
          new XElement("LineCountHits", bene.LineCountHits), 
          new XElement("Line", bene.SearchLine), 
         new XElement("Entity", 
           new XElement("Names", 
           from name in bene.Entity.Names 
           select new XElement("name", name)))) 
          ) 
        ); 
Смежные вопросы