Member 12523149 Ответов: 1

Как читать XML из строковой переменной с определенным тегом


Мы должны прочитать строку xml с определенным именем тега. Пожалуйста посоветуйте как можно скорее
мы должны использовать некоторый код для одного корневого значения, но нам нужно несколько корневых элементов и определенное имя тега для чтения данных.
Вот мой код мы должны использовать одно корневое значение он работает нормально,

Что я уже пробовал:

строка xmlString = "<дата>5/15/2018<название>Тест тест<курс>демо";

XmlDocument doc = новый XmlDocument();
doc.LoadXml(xmlString);
Узлы XmlNodeList = doc.Функцию documentelement.SelectNodes("//данные");
StringBuilder yourString = новый StringBuilder();
foreach (узел XmlNode в узлах)
{
твоя тетрадь.Добавить("дата:" + узел["дата"].Через свойство innerText + "
");
твоя тетрадь.Append("CoachName:" + node["CoachName"].Через свойство innerText + ",");
}
PlaceHolder1.Элементы Управления.Add(new LiteralControl(yourString.Метод toString()));

F-ES Sitecore

Если вам нужно несколько корней, это немного банально, но вы можете обернуть свой xml в искусственный корень

строки xmlString = "в<дата>По 5/15/2018 на< дата&ГТ;&ЛТ;дата>По 5/16/2018 на< дата&ГТ;";
XmlDocument doc = новый XmlDocument();
док.LoadXml("&ЛТ;корень&ГТ;" + xmlString + "&ЛТ;/корни&ГТ;");

#realJSOP

Если бы вы опубликовали это в качестве ответа, я мог бы проголосовать за 5. :)

Member 12523149

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

#realJSOP

Что вы подразумеваете под "динамическим контентом"?

Member 12523149

Xml-данные хранятся в таблице, используя хранимую процедуру для получения данных

#realJSOP

Вы имеете в виду несколько возвращенных строк, верно?

#realJSOP

Сами данные хранятся в формате xml (в виде одной гигантской строки), или вы используете SQL Server FOR XML AUTO,ELEMENTS предложение для получения данных из таблицы

#realJSOP

Я обновил свое решение (ниже).

1 Ответов

Рейтинг:
2

#realJSOP

Во-первых, ваш xmlString переменная искажена - вам нужны закрывающие теги для каждого элемента.

Чтобы разрешить исключение множественных корней, выполните следующие действия Фес-технологического оборудования сказал. Я использую аналогичную, но альтернативную конструкцию:

// your xml string, corrected by adding closing tags
string xmlString = "<date>5/15/2018</date><name>test test</name><course>demo</course>";

// just parse the xml string after adding a root wrapper tag.
XElement xml = XElement.Parse(string.Format("<root>{0}</root>",xmlString));

// now you can retrieve the elements:
string date = xml.Element("date").Value;
string name = xml.Element("name").Value;
string course = xml.Element("course").Value;


РЕДАКТИРОВАТЬ =================================

Вы говорите, что он не работает с "динамическим контентом", который вы определили как "извлеченный из базы данных". Либо данные хранятся в виде одной гигантской XML-строки (плохая идея), либо вы используете SQL Server FOR XML AUTO,ELEMENTS предложение для извлечения данных.

Если это первая возможность (что также, вероятно, имеет место), вы должны обработать каждую строку по одной за раз и обернуть данные из каждой строки соответствующим корневым элементом ("строка" было бы хорошим именем элемента), а затем объединить строки в одну строку XML, которая затем обернута соответствующим корневым элементом.

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

В любом случае, тогда было бы просто разобрать/десериализовать ваши данные в объекты C#.