2015-07-22 3 views
0

У меня есть список «fetchXmlList» строк, который содержит разные xetch-объекты извлечения. Я хочу создать XML-документ, используя этот список.Создание XML-документа из списка <string> в C#

Xml документ выглядит следующим образом:

<mappings> 
<main_fetchxml> 
    fetchXmlList[0] 
</main_fetchxml> 
<relatedqueries> 
    fetchXmlList[1] 
    fetchXmlList[2] 
     . 
     . 
     . 
</relatedqueries> 
</mappings> 

Для relatedqueries XML узла, я должен добавить цикл по каждому элементу и перебирать каждый список элементов, начиная со 2-го пункта списка до конца списка.

Я начал писать следующие строки кода:

XmlDocument fetchXmlDoc = new XmlDocument(); 
XmlElement rootNode = fetchXmlDoc.CreateElement("main_fetchxml"); 
fetchXmlDoc.AppendChild(rootNode); 
rootNode.AppendChild(fetchXmlList[0]); 

Но добавление элемента списка к объекту XMLElement не позволяет. Есть ли другой путь?

Любая помощь будет оценена по достоинству. Заранее спасибо.

+0

Какой код вы написали? –

+1

Можно изменить исходный вопрос, чтобы включить образцы кода? Очень сложно читать код в комментариях. – CarlR

+0

У вас есть * для использования XmlDocument? Если вы можете использовать LINQ to XML, это становится тривиальным ... хотя я бы поставил под вопрос ваше использование нескольких значений в одном элементе, подобном этому, используя разрывы строк в текстовом узле ... –

ответ

-1

1) Вы должны иметь корневой элемент

2) попробовать этот код

public static string Fetch2Xml(string s) 
{  
    return HttpUtility.HtmlDecode(s); 
} 

private static void Main(string[] args) 
{ 
    String s = "&lt;fetch distinct=\"false\" no-lock=\"false\" mapping=\"logical\" /&gt;"; 

    String[] sa = new string[] { s, s, s, s, s, s, s }; 

    XmlDocument doc = new XmlDocument(); 

    XmlElement someRoot = doc.CreateElement("mappings"); 

    XmlElement ele = doc.CreateElement("main_fetchxml"); 
    ele.InnerXml = Fetch2Xml(sa[0]); 
    someRoot.AppendChild(ele); 

    XmlElement ele2 = doc.CreateElement("relatedqueries"); 

    for (int a = 1; a < sa.Length; ++a) 
    { 
     ele2.InnerXml += Fetch2Xml(sa[a]); 
    } 

    someRoot.AppendChild(ele2); 
    doc.AppendChild(someRoot); 

    doc.Save(@"c:\temp\bla.xml"); 
} 

, что приведет также:

<mappings> 
    <main_fetchxml> 
    <fetch distinct="false" no-lock="false" mapping="logical" /> 
    </main_fetchxml> 
    <relatedqueries> 
    <fetch distinct="false" no-lock="false" mapping="logical" /> 
    <fetch distinct="false" no-lock="false" mapping="logical" /> 
    <fetch distinct="false" no-lock="false" mapping="logical" /> 
    <fetch distinct="false" no-lock="false" mapping="logical" /> 
    <fetch distinct="false" no-lock="false" mapping="logical" /> 
    <fetch distinct="false" no-lock="false" mapping="logical" /> 
    </relatedqueries> 
</mappings> 
+0

, и вы можете использовать построитель строк ^^ – Chaka

+1

Поскольку fetchXmlList содержит fetchxmls, код выше не будет корректно добавлять теги xml. Ex: < выборки различны = «ложь» без блокировки = «ложь» отображение = «логический» > < Кроме того, все элементы списка должны быть надлежащим образом отформатирован и формировать отформатированный XML-документ. –

+0

обновленный код ответа :) – Chaka

0

Вы можете использовать это:

public static void SerializeObject(this List<string> list, string fileName) 
    { 
     var serializer = new XmlSerializer(typeof(List<string>)); 
     using (var stream = File.OpenWrite(fileName)) 
     { 
      serializer.Serialize(stream, list); 
     } 
    } 

    public static void Deserialize(this List<string> list, string fileName) 
    { 
     var serializer = new XmlSerializer(typeof(List<string>)); 
     using (var stream = File.OpenRead(fileName)) 
     { 
      var other = (List<string>)(serializer.Deserialize(stream)); 
      list.Clear(); 
      list.AddRange(other); 
     } 
    } 
Смежные вопросы