Создание XML с использованием Linq to XML и массивов - PullRequest
3 голосов
/ 10 августа 2009

Я использую Linq To XML для создания XML, который отправляется третьей стороне. Мне трудно понять, как создать XML с использованием Linq, когда часть информации, которую я хочу отправить в XML, будет динамической.

Динамическая часть XML хранится в виде массива string [,]. Этот многомерный массив содержит 2 значения.

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

Как бы я добавил в свою динамически созданную строку XML-файл, создаваемый Linq?

Например:

//string below contains values passed into my class

string [,] AccessoriesSelected;

//I loop through the above array and build up my 'Tag' and store in string called AccessoriesXML


//simple linq to xml example with my AccessoriesXML value passed into it
XDocument RequestDoc = new XDocument(
 new XElement("MainTag",
 new XAttribute("Innervalue", "2")
 ),
AccessoriesXML);

«Тег» является необязательным дополнением, он может появляться в моем XML несколько раз или нет - это зависит от того, установил ли пользователь какие-либо флажки.

Прямо сейчас, когда я запускаю свой код, я вижу это:

<MainTag> blah blah </MainTag>
&lt ;Tag&gt ;&lt ;InnerTag&gt ; option1="valuefromarray0" option2="valuefromarray1" /&gt ;&lt ;Tag/&gt ;

Я хочу вернуть что-то такое:

<MainTag> blah blah </MainTag>
<Tag><InnerTag option1="valuefromarray0" option2="valuefromarray1" /></Tag>
<Tag><InnerTag option1="valuefromarray0" option2="valuefromarray1" /></Tag>

Есть мысли или предложения? Я могу заставить это работать, используя XmlDocument, но я хотел бы, чтобы это работало с Linq, если это возможно.

Спасибо за вашу помощь, Рич

1 Ответ

3 голосов
/ 10 августа 2009

Построение XElements с помощью конструктора ("name", "value") будет использовать текст значения в качестве литерального текста - и экранировать его при необходимости для достижения этого.

Если вы хотите создать XElement программно из фрагмента текста XML, который вы хотите интерпретировать как XML, вам следует использовать XElement.Load(). Это будет анализировать строку как фактический XML, вместо того, чтобы пытаться назначить текст строки как экранированное литеральное значение.

Попробуйте это:

XDocument RequestDoc = new XDocument(
 new XElement("MainTag",
 new XAttribute("Innervalue", "2")
 ),
 XElement.Load(new StringReader(AccessoriesXML)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...