Вопросы с тегами [linq-to-xml]

1

голосов
2

ответ
1.9k

Просмотры

Get XElements List of XElements List from XML document using linq to xml

Я создаю список объектов, узлов: узел общественного класса {общественного строковый ключ {получить; задавать; } Публичная строка Значение {получить; задавать; }} ListNode общественного класса: List {} И у меня есть XML-документ: ххх 111 YYY 222 ZZZ 333 ааа 444, что я хочу сделать, это поместить эти XML-элементы в список объектов ListNode с помощью LINQ к XML: => Node Object => ListNode => Список это мой LINQ для запроса XML: Список listNodeDetails = XElement .Element ( "подробности") .elements ( "деталь") .elements ( "узел") .Select (п => новый узел () { ключ = n.Element ( "ключ") значение, значение = n.Element ( "узел") Элемент ( "значение") значение}) .ToList ()...;
YouneL
1

голосов
1

ответ
35

Просмотры

Как использовать синтаксис LINQ, чтобы выбрать из моего XDocument всех тех XElements, которые имеют определенное значение атрибута?

Мне нужно создать новый XDocument на основе другого XDocument, и так хочется, чтобы перебрать все XElements оригинального XDocument, добавляя только те XElements, которые проходят определенные критерии к новому XDocument. Проблема заключается в том, что моя переменная «дублирует» всегда нулевой, но он должен всегда содержать как минимум один элемент, который является текущим в данный момент. XDocument док = новый XDocument (); XElement RootElement = новый XElement ( "пользователи"); .. Вар allElements = originalDoc.Element ( "пользователи") элементы () Где (е => e.Name.LocalName == "пользователь"); Еогеасп (вар xUser в allElements) {вар дубликаты = originalDoc.Element ( "пользователи") элементы () Где (е => e.Attribute ( "Войти") Значение == "Demo1".).. rootElement.Add (xUser); } Doc.Add (RootElement); вернуть документ; Где originalDoc является XDocument, что синтаксис LINQ, чтобы выбрать из моей XDocument в тот момент все те XElements, которые имеют определенное значение атрибута? Приложение: Вот то, что XML выглядит, не пространства имен или какие-либо дополнительные услуги, только корневой элемент и одного уровня подэлементов:
Edward Tanguay
1

голосов
4

ответ
55

Просмотры

How to deserialize an array containing a list?

I would like to deserialize an array containing some things and 3 List. The program works fine except for List. The lists are created but they contain nothing ! Can you help me ? Here is how the xml file looks like : C:\Users\Michael\Desktop\BT 1 normal\Programme BT\ 25 a Abba Take a chance on me 1.25 0.5 0.5 Ahkayaqua Angelene .... My code to deserialize : XElement xmle; xmle = XElement.Load(_folder + "Blind.xml"); textBox1.Text = xmle.Element("numero").Value; textBox4.Text = xmle.Element("theme").Value; textBox3.Text = xmle.Element("heure_debut").Value; textBox5.Text = xmle.Element("lien").Value; textBox2.Text = xmle.Element("mdp").Value; extraits = (from ex in xmle.Element("playlist").Elements("extrait") select new Extrait (ex.Element("artiste").Value, ex.Element("titre").Value, 0, 0, 0, (from jat in ex.Element("JoueursAT").Elements("JoueurAT") select jat.Element("JoueurAT").Value).ToList(), (from ja in ex.Element("JoueursA").Elements("JoueurA") select ja.Element("JoueurA").Value).ToList(), (from jt in ex.Element("JoueursT").Elements("JoueurT") select jt.Element("JoueurT").Value).ToList())).ToArray(); And here is my class: public class Extrait { private String _Artiste; private String _Titre; private double _PointA; private double _PointT; private double _PointAT; private List _JoueurA; private List _JoueurT; private List _JoueurAT; public String Artiste { get { return _Artiste; } set { _Artiste = value; } } public String Titre { get { return _Titre; } set { _Titre = value; } } public Double PointA { get { return _PointA; } set { _PointA = value; } } public Double PointT { get { return _PointT; } set { _PointT = value; } } public Double PointAT { get { return _PointAT; } set { _PointAT = value; } } public List JoueurA { get { return _JoueurA; } set { _JoueurA = value; } } public List JoueurT { get { return _JoueurT; } set { _JoueurT = value; } } public List JoueurAT { get { return _JoueurAT; } set { _JoueurAT = value; } } public Extrait(String Artiste, String Titre, Double PointA, Double PointT, Double PointAT, List JoueurAT, List JoueurA, List JoueurT) { _Artiste = Artiste; _Titre = Titre; _PointA = PointA; _PointT = PointT; _PointAT = PointAT; _JoueurAT = JoueurAT; _JoueurA = JoueurA; _JoueurT = JoueurT; } } Well, I've tried many possibilities, but none worked !
mike888
1

голосов
1

ответ
843

Просмотры

LINQ над XML: найти родителя верхнего уровня

Я использую C # и LINQ, чтобы пересечь мой XDocument. Допустим, у меня есть код: ... ... ... Теперь у меня есть идентификатор 3, и удалось найти элемент с этим идентификатором. На данный момент, я хочу найти идентификатор верхнего уровня родительского узла (это родитель, который один уровень ниже корня). В этом случае, я хочу, чтобы найти элемент с идентификатором 1. Я могу сделать это: myElement.Parent.Parent Но я не знаю, сколько уровней вверх это может быть - так что я, вероятно, нужна рекурсия. Тем не менее, я помню существо XDocument читать только вперед. Насколько дорого найти Родитель - рекурсивно? Что такое лучший способ сделать это? Мои XML файлы могут быть до 500k Большой.
Alex York
1

голосов
1

ответ
1.4k

Просмотры

Как ссылаться System.Xml.Linq в сервер CLR Object SQL 2008?

Я хочу создать CLR хранимой процедуры для SQL Server 2008, которая ссылается на сборку System.Xml.Linq. В соответствии с документацией (http://msdn.microsoft.com/en-us/library/ms403279.aspx) эта сборка является безопасной для использования в SQL Server 2008. Однако при попытке добавить ссылку с помощью Visual Studio 2008 (Team Люкс с ГДР R2 установлен) этот узел не указан в качестве одного из доступных сборок. Кто-нибудь знает, как я могу добавить эту сборку в проект SQL Server CLR?
1

голосов
3

ответ
608

Просмотры

как извлечь максимальную дату из веба-страницы в доте чистого окна приложения

В моем приложении я хочу, чтобы извлечь последнюю дату, показанную на веб-странице. Я использую класс System.Xml.Linq.XDocument для извлечения содержимого. Но я не в состоянии извлечь PubDate корма. Вот мой код, но его подача исключение. System.Xml.Linq.XDocument feeddata = System.Xml.Linq.XDocument.Load ( "http://feeds2.feedburner.com/plasticsnews/plasticsinformation/plastopedia"); вар maxPubDates = (от кормов в feeddata.Descendants ( "каналы") выберите фиды); DateTime MaxDate = maxPubDates.Max (подача => (DateTime) feed.Element ( "PubDate"));
banita
1

голосов
2

ответ
676

Просмотры

Как производить несколько элементов в Linq для XML переписчика?

У меня есть довольно простой Linq для запроса XML: вар д = от с в xd.Descendants ( "PrimaryCategory"), где (целое) xd.Element ( "PrimaryCategoryID") == 3 выберите новый {CampaignName = c.Element ( "CategoryList ") .Element (" CategoryName ") Значение, campaignURL = c.Element (" CategoryList ") Элемент (". CategoryURL ") Значение}. Это делает штраф за потянув CategoryName и categoryURL от первого CategoryList элемента PrimaryCategoryID 3. Единственная проблема заключается в том, что существует несколько узлов CategoryList в PrimaryCategory и мне нужно, чтобы вернуть перечислимую список объектов со всеми Именами и URL-адрес. Что я делаю неправильно?
1

голосов
1

ответ
1.8k

Просмотры

Databinding вопрос: DataGridView XDocument (с помощью LINQ к XML)

Обучение LINQ было много веселья до сих пор, но, несмотря на чтение пару книг и кучу интернет-ресурсов по этой теме, я все еще чувствую себя полным n00b. В последнее время я только что узнал, что, если мой запрос возвращает тип Anonymous, в DataGridView Я населяющий будет ReadOnly (потому что, по-видимому, Анонимные типами являются ReadOnly.) Сейчас я пытаюсь выяснить, самый простой способ: Получить подмножество данных из файла XML в DataGridView, Разрешить пользователь редактировать указанные данные, Палку измененных данных обратно в файл XML. До сих пор у меня есть шаги 1 и 2 выяснили: класс Container общественности {общественности строка Id {получить; задавать; } Публичная строка Barcode {получить; задавать; } Общественного поплавка Количество {получить; задавать; }} // Для использования с Distinct () оператора общественного класса ContainerComparer: IEqualityComparer {общественный BOOL Равно (контейнер х, Контейнер у) {вернуться x.Id == y.Id; } Общественного ИНТ GetHashCode (Container объект) {вернуться obj.Id.GetHashCode (); }} = Вар штрих-коды (от SRC в xmldoc.Descendants ( "контейнер"), где src.Descendants (). Count ()> 0 выбрать новый контейнер {Id = (строка) src.Element ( "Идентификатор"), штрих-код = ( строка) src.Element ( "Штрих-код"), Количество = float.Parse ((строка) src.Element ( "Количество") Атрибут ( "значение"))}) Distinct (новый ContainerComparer ())..; dataGridView1.DataSource = barcodes.ToList (); Это прекрасно работает при получении данных я хочу от XML в DataGridView, так что пользователь имеет возможность манипулировать значение. После выполнения ступенчатого через след моего кода, я м находя, что изменения значений, сделанных в DataGridView не связаны с объектом XDocument и, как таковые, не распространяются обратно. Как мы заботимся о шаге 3? (Получение данных обратно в XML) Можно ли Свяжите XML непосредственно в DataGridView? Или я должен написать еще одно заявление LINQ, чтобы получить данные из DGV обратно в XDocument? Suggstions?
Pretzel
1

голосов
2

ответ
93

Просмотры

Данные не получает упорядочены по дате

Невозможно получить список отсортирован по дате. Как показывают данные, упорядоченные по дате? XDocument док = XDocument.Load (Server.MapPath ( "file.xml")); IEnumerable изделия = от пункта в doc.Descendants ( "элемент") OrderBy Convert.ToDateTime (item.Attribute ( "lastChanges") значение.), Где нисходящие item.Attribute ( "х") Значение == 1 выберите пункт. Repeater1.DataSource = предметы; Repeater1.DataBind (); Xml файл выглядит следующим образом:
desperate man
1

голосов
1

ответ
74

Просмотры

Как я могу реализовать файл меток для регионов, которые хорошо интегрируются со структурой приложения MVC?

Справочная информация: Я работаю на сайт, который будет доступен в нескольких регионах. Каждый регион может иметь другой язык, или различные варианты написания на том же языке. Мы планируем с помощью файла ярлыка XML, который будет содержать весь текст, который будет отображаться для любого данного региона. Так будет загружать региональный веб RegionALabels.xml и все его текст будет исходить от этого. RegionB загрузит RegionBLabels.xml, и так далее. Я имею в виду реализации этого пути структурирования файла XML, так что он имеет ту же структуру, как и мое приложение. Например, текст для этикетки с ID lblFirstName текстом для этикетки с ID lblLastName Причины, почему я хочу сделать это таким образом, потому что я хочу imploy конвенции по конфигурации, поэтому она становится неявной, где найти текст для любого заданного частичного представления. используя эту структуру, я могу использовать Linq-to-XML, чтобы выбрать текст, имеющие отношение к частичному виду я собираюсь Render. Например, если я рендеринг частичного вида HomePartial1, я могу получить ярлыки, связанные с этим частичным видом на что-то вроде: вар узлов = от е в (из Реза в this.XmlConfiguration.Descendants ( «Base») выберите разрешение) .Descendants ( "Home") выберите F; вар HomePartial1Labels = nodes.Elements ( "HomePartial1") ToList ().; Вопрос: Так что это не так, в основном то, что я хочу спросить, если кто-то может указать на очевидные дыры в этом подходе, прежде чем я попытка осуществить это? Может кто-нибудь, кто имел дело с этим, прежде чем предложить что-то лучше? Кроме того, у меня есть один конкретный requriement оказывать частичный вид с числом вкладок, каждый из которых имеет для отображения текста & ряда результатов, связанных с этой вкладкой. Например, у меня есть 3 вкладки: фонд компании Группа Если кто-то делает поиск, вкладки должны отображаться количество результатов по поисковому запросу возвращается на вкладку, так что если я ищу «JP Morgan» они стали: Фонд (10) // 10 фондов содержат название компании «JP Morgan» (12) // 12 компаний содержат название группы «JP Morgan» (15) // 15 групп содержат название «JP Morgan» для того, чтобы содержать текст «фонд» , «Компания» и «Группа» в файле этикетки, я буду иметь, чтобы поставить «(» и «)» также, что означает, что я думаю, что я должен использовать держатель место и заменить его фактическое значение, когда я рендеринга парциальное , Таким образом, XML начнет выглядеть следующим образом: фонды (# значение #) Компания (# значение #) Группа (# значение #), но я думаю, что это собирается начать выглядеть грязными и немного хак. Может ли кто-нибудь предложить что-то лучше? Благодарю. Средства (# значение #) Компания (# значение #) Группа (# значение #), но я думаю, что это собирается начать выглядеть грязными и немного хак. Может ли кто-нибудь предложить что-то лучше? Благодарю. Средства (# значение #) Компания (# значение #) Группа (# значение #), но я думаю, что это собирается начать выглядеть грязными и немного хак. Может ли кто-нибудь предложить что-то лучше? Благодарю.
DaveDev
1

голосов
2

ответ
477

Просмотры

Add documents using c#

Я пытаюсь добавить документ в индекс, используя C # (XML), но я всегда получаю ошибку 400 (Bad Request). Любые идеи, что я делаю неправильно? Код: частная статическая строка GetXml () {XDocument документ = новый XDocument (новый XDeclaration ( "1,0", "UTF-8", "да"), новый XElement ( "добавить", новый XElement ( "документ", новый XElement ( "поле", новый XAttribute ( "имя", "EmployeeID"), новый XText ( "05991")), новый XElement ( "поле", новый XAttribute ( "имя", "навыки"), новый XText ( "Perl" ))))); вернуть документ. ToString (SaveOptions.DisableFormatting); } Частной статической силы AddDocument () {содержание строки = GetXml (); HttpWebRequest запрос = (HttpWebRequest) WebRequest.Create ( "HTTP: // mysolrhost: 8080 / Solr / обновление"); request.Method = "POST"; request.ContentType = "текст / XML; кодировка = UTF-8"; байт [] ByteArray = Encoding.UTF8.GetBytes (содержание); request.ContentLength = byteArray.Length; используя (вар requestStream = request.GetRequestStream ()) с использованием (VAR SW = новый StreamWriter (requestStream)) {sw.Write (содержание); } WebResponse ответ = request.GetResponse (); ЕЫпе (((HttpWebResponse) ответ) .StatusDescription); } государственной статической силы основных (String []) {арг AddDocument (); } Редактировать: проблема решена (ответ приведен ниже). Большое спасибо!
rrejc
1

голосов
1

ответ
336

Просмотры

C # Linq XML вытащить узлы из документа

Я пытаюсь использовать Linq XML для выбора номера узлов и детей, но становится страшно смущен! В примере XML ниже мне нужно вытащить все и все Wanted со своими дочерними узлами, но без других узлов в между MostWanted и Wanted узлов. Это потому, что каждый MostWanted может следовать любое количество Разыскивается и Требуются относятся к предыдущему MostWanted. Я даже путая сам печатал это вверх !!! Как я могу сделать это в C # ?? 1 1 1 1 1 0001 2 х 1 1 1 1 0002 3 4 х
Adrian
1

голосов
1

ответ
163

Просмотры

Linq для XML - как получить значение атрибута

`XElement конфигурации = XElement.Parse (@» «); XElement ответ = config.Element ( "Ответ"); SESSIONID = (строка) response.Attribute ( "SessionId"); `почему ответ нуль в этом случае? как я могу получить значение атрибута SESSIONID?
kalls
1

голосов
2

ответ
2.6k

Просмотры

WP7 Linq для XML, чтобы получить дочерний элемент с XElement по имени

Я знаю, что это несколько простой вопрос, но я не смог заставить его работать даже после того, как смотреть на ответы на SO и LINQ к XML-учебники. Я использую Windows Phone 7, но я не думаю, что следует делать различие. У меня есть XML, который выглядит следующим образом: у Вас есть ошибка 1 типа у меня есть XML выше загружен в XElement. Я хочу, чтобы узел «ошибка». Этот вопрос говорит, что вы должны обращаться с пространством имен. Я попробовал мой запрос с использованием и без имен, и это не работает в любом случае. Запрос с пространством имен: частный объект ParseElement (XElement responseElement) {XNamespace нс = "http://anamespace.com/stuff/"; IEnumerable errorNodes = от е в responseElement.Elements (нс + "Ошибка") выберите E; } Запрос без имен: частный объект ParseElement (XElement responseElement) {IEnumerable errorNodes = от е в responseElement.Elements ( "ошибка") выберите е; } Переменная errorNodes никогда не будет заполняться XElements. Учебники я прочитал все использовать это обозначение для выбора элемента по имени, но это не работает для меня.
CACuzcatlan
1

голосов
3

ответ
707

Просмотры

Can't access XML with Linq

I am trying to parse the following XML file and nothing I do results in anything but the root or the firstnode. I am trying to get a list of Detail so that I can get the attribute values, but everything I have tried results in no data. My latest attempt is this one... var xml= XDocument.Load(FileDetails.FullName); var xml1 = XDocument.Parse(xml.Root.FirstNode.ToString()); var xml3 = from e in custs.Root.Elements("Detail") select e; var xml4 = from e in xml1.Elements("Detail") select e; Different attempt var xml = XDocument.Load(FileDetails.FullName); var root = xml.Root; var els = root.Descendants("Detail"); The above displays in the immediate window: root.Descendants("Detail") {System.Xml.Linq.XContainer.GetDescendants} name: null self: false System.Collections.Generic.IEnumerator.Current: null System.Collections.IEnumerator.Current: null The problem is with the attributes in the Report element: This is from SQL Server Reporting Server, I'll have to remove one by one and find the culprit. This is the final solution to this problem There may be a better way, but once the data is loaded you cannot easily remove the namespace. //load the original document var xml = XDocument.Load(FileDetails.FullName); //remove all the superflouos data attributes xml.Root.RemoveAttributes(); //turn into a string var content = xml.Root.ToString(); //remove the official namespace, there is no easy way to remove the namespace after document has been loaded, so we'll replace it var newXmlContent = content.Replace("", ""); //parse the updated string into a workable document var newXml = XDocument.Parse(newXmlContent).Root; This returns a new XML document that can be processed normally.
Tony Basallo
1

голосов
2

ответ
113

Просмотры
1

голосов
2

ответ
1.4k

Просмотры

Creating objects from child elements using LINQ to XML

Есть ли способ использовать LINQ для XML для запросов к документу XML, как один ниже, чтобы создать новый (анонимно или сильно типизированных) объекты из дочерних элементов потомка? Вот мой XML документ: Параметр 1 100 Параметр 2 200 Параметр 1 600 Параметр 2 300 Мой LINQ запрос выглядит следующим образом: Dim RuleName As String = "Rule_A" Dim Parms () = (С р В pXDoc.Descendants ( "Правило") _ где p.Attributes ( "Имя"). Любой И p.Attribute ( "Name"). Value.Equals (RuleName) _ Выберите New DataParameter с {_ '' Вот где я хотел бы вывести значение параметра «» элементы находящиеся под «Rule_A» и построить объект, как показано ниже .Name = LINQ магии, чтобы получить значение .Value = LINQ магии, чтобы получить значение}). ToArray После выполнения этого запроса, мой Parms () массив будет состоять из двух объектов в нем, представляющем имя / Значения параметра «1» и «Parameter 2», которые подпадают под «Rule_A». Ближайший я был в состоянии получить использует p.Element (параметр) .Element (Name) .Value, но это не будет работать, как я буду только получить первый элемент параметра. Я также попытался с помощью элементов (), но не был в состоянии понять, как я хотел бы получить значение каждого из них. мой Parms () массив будет состоять из двух объектов в нем, представляющих имени / Значение параметра «1» и «Parameter 2», которые подпадают под «Rule_A». Ближайший я был в состоянии получить использует p.Element (параметр) .Element (Name) .Value, но это не будет работать, как я буду только получить первый элемент параметра. Я также попытался с помощью элементов (), но не был в состоянии понять, как я хотел бы получить значение каждого из них. мой Parms () массив будет состоять из двух объектов в нем, представляющих имени / Значение параметра «1» и «Parameter 2», которые подпадают под «Rule_A». Ближайший я был в состоянии получить использует p.Element (параметр) .Element (Name) .Value, но это не будет работать, как я буду только получить первый элемент параметра. Я также попытался с помощью элементов (), но не был в состоянии понять, как я хотел бы получить значение каждого из них.
Atari2600
1

голосов
1

ответ
125

Просмотры

Любая идея, почему это LINQ для запроса XML дает мне дублирует значение?

Я пытаюсь вернуть список авторов из сообщений в ветке форума с использованием LINQ для запроса XML, но запрос возвращает мне один и тот же автор для каждой должности. Запросы работают правильно, когда я делаю их по отдельности, как это: вар док = XDocument.Load ( «http://us.battle.net/wow/en/forum/topic/2267488434»); XNamespace нс = "http://www.w3.org/1999/xhtml"; вар сообщения = doc.Descendants (нс + "ДИВ") .гд (а => a.Attribute ( "ID")! = NULL && a.Attribute ( "ID"). Value == "нить") .elements ( нс + "ДИВ"); вар авторы = posts.Descendants () Где (а => a.Attribute ( "класс") = NULL && a.Attribute ( "класс") Значение == "Контекст-ссылка!".). Но когда я пытаюсь выполнить те же действия в одном запросе я не получаю те же результаты. Ниже мой запрос:. Авторы вара = от тда в doc.Descendants (нс + "ДИВ") .гд (а => a.Attribute ( "ID") = NULL && a.Attribute ( "Идентификатор") Значение = = "нить") .elements (нс + "DIV") пусть элементы = doc.Descendants () .где (а => a.Attribute ( "класс")! = NULL) пусть автор = elements.First (а => . a.Attribute ( "класс") Значение == "контекст-связь") выберите новый {Author = author.Value.Trim ()}; Любая идея, что я делаю неправильно? Потомки (нс + "ДИВ") .гд (а => a.Attribute ( "ID")! = NULL && a.Attribute ( "идентификатор"). Value == "нить") .elements (нс + "ДИВ" ) пусть элементы = doc.Descendants () .где (а => a.Attribute ( "класс")! = NULL) пусть автор = elements.First (а => a.Attribute ( "класс"). Value == " контекстно-связь ") выберите новый {Автор = author.Value.Trim ()}; Любая идея, что я делаю неправильно? Потомки (нс + "ДИВ") .гд (а => a.Attribute ( "ID")! = NULL && a.Attribute ( "идентификатор"). Value == "нить") .elements (нс + "ДИВ" ) пусть элементы = doc.Descendants () .где (а => a.Attribute ( "класс")! = NULL) пусть автор = elements.First (а => a.Attribute ( "класс"). Value == " контекстно-связь ") выберите новый {Автор = author.Value.Trim ()}; Любая идея, что я делаю неправильно? Элементы (нс + "DIV") пусть элементы = doc.Descendants () .гд (а => a.Attribute ( "класс")! = NULL) пусть автор = elements.First (а => a.Attribute ( "класс «) .Value == "контекстно-связь") выберите новый {Автор = author.Value.Trim ()}; Любая идея, что я делаю неправильно? Элементы (нс + "DIV") пусть элементы = doc.Descendants () .гд (а => a.Attribute ( "класс")! = NULL) пусть автор = elements.First (а => a.Attribute ( "класс «) .Value == "контекстно-связь") выберите новый {Автор = author.Value.Trim ()}; Любая идея, что я делаю неправильно?
johnhforrest
1

голосов
1

ответ
603

Просмотры

How to load and merge a dataset of XML docs

Я хотел бы, чтобы потреблять набор данных XML документов, и объединить их в единый документ, содержащий только отдельные элементы. Чтобы проиллюстрировать это, у меня есть набор данных, как: г, х - ------------------------------- 1, 111 2, 222222 3, 333 приведет: 111222333 элемент из г = 2 не объединены, так как мы уже есть элемент = от г = 1. Мне нужно только объединить новые элементы, начиная с г = 1 идти вперед. Я могу пройти по списку, но испытывают трудности сравнения и слияния. Приведенный ниже код не может определить 222 как дубликат. Разве это возможно сравнение значений элементов, а? используя (SqlDataReader dsReader = cmd.ExecuteReader ()) {XDocument baseDoc = новый XDocument (); XDocument childDoc = новый XDocument (); в то время как (dsReader. Read ()) {// это базовый документ, слияние вперед от здесь, если (dsReader [ "R"]. ToString () == "1") {baseDoc = XDocument.Parse (dsReader [ "х"]. ToString ()); SqlContext.Pipe.Send ( "старт:" + baseDoc.ToString ()); } // это ребенок документ, не сливаться операция еще {childDoc = XDocument.Parse (dsReader [ "х"] ToString ().); // найти элементы только присутствующие в детской вар childOnly = За исключением (childDoc.Descendants ( "корень") элементов ().). (BaseDoc.Descendants ( "корень") элементов ().); Еогеасп (вар е в childOnly) {baseDoc.Root.Add (е); }}}}
Nathan Skerl
1

голосов
1

ответ
589

Просмотры

Нужна помощь с использованием LINQ: XML для создания экземпляра класса

У меня есть класс, который определяет метеорологические измерения с API. Я создал классы для хранения данных измерений в файле XML. Я был в состоянии записать в файл XML, но не могу читать из него. Мне нужно, чтобы быть в состоянии прочитать данные, а затем создать экземпляр класса измерений с помощью конструктора, а затем добавить эти экземпляры в список Ниже приведен код для измерения конструктора общественного измерения (строка longit, строка Latitud, строка Cty, строка PCODE, DateTime DTE, десятичное Зуй, десятичное предварительно, строка windDir, Int windSp): основание (longit, Latitud, Cty, PCODE) {DTE = дата; Зуй = влажности; предварительно = осадки; windDir = направление ветер; windSp = WindSpeed; } И вот образец XML-файла -76.2858726 36.8507689 Thetford IP24 1ED 01/04/2011 SE 8 2,6 0. 0 А вот метод, который я написал, чтобы прочитать файл и сделать экземпляр класса измерений. Я получаю никаких ошибок, но не так и не удалось создать список общего списка GetList () {Список измерений = новый список (); XDocument док = XDocument.Load (@ "C: \ Users \ Соня \ Documents \ Visual Studio 2010 \ Projects \ WeatherAPI \ WeatherAPI \ measurement_store.xml"); XElement корень = doc.Root; вар д = (от S в root.Descendants ( "Измерение") выбрать новое измерение {Долгота = s.Element ( "долгота"). Значение, широта = s.Element ( "широта"). Значение, Город = s.Element ( "город"). Value, индекс = s.Element ( "почтовый индекс"). Value, Дата = DateTime.Parse (s.Element ( "Дата"). Значение), влажность = Decimal.Parse (s.Element ( "влажность"). Значение), осадки = Decimal.Parse (s.Element ( "осаждение") .Value), WindSpeed ​​= Convert.ToInt32 (s.Element ( "WindSpeed") Значение), = s.Element направление ветер ( "направление ветра") Значение,}) ToList ()...; d.ForEach (measurements.Add); возвращать измерения; } // конец GetList () Я также написал другой метод, несколько иного формат .. Список createXMLListMeasurements общественного () {// загрузить XML-документ XDocument дока = XDocument.Load (@ "C: \ Users \ Соня \ Documents \ Visual Studio 2010 \ Projects \ WeatherAPI \ WeatherAPI \ measurement_store.xml "); // XElement корень = doc.Root; // создать экземпляр нового списка измерений Список измерений = новый список (); // получить список элементов измерения вара д = от й в doc.Descendants ( «Измерение») //, где выбрать новый {// присвоить переменные данные измерения из XML-док долготы = (строка) s.Element ( «долгота» ) .Value, широта = (строка) s.Element ( "широта"). Value, город = (строка) s.Element ( "город"). Value, индекс = (строка) s.Element ( "почтовый индекс"). Значение, Date = DateTime.Parse (s.Element ( "Дата"). Value), влажность = Decimal.Parse (s.Element (» Консольное приложение вызывает этот метод для тестирования и не производит ничего, кроме WeatherAPI.Measurement WeatherAPI.Measurement помощи? Спасибо!
Sonya
1

голосов
1

ответ
1.1k

Просмотры

Разбор данных XML с XDocument / XElement

При попытке разобрать через RSS канал для блога, я бегу в проблему. В то время как каждый элемент попадает в мой класс штрафа, то один, содержащий фактическое содержание всегда пусто. ЭТО ПОЛНЫЙ HTML Thats XML-строки, что он, кажется, не разобрать. Его также только один с двоеточием, и только один, который содержит данные HTML. Остальные выглядят так. Удивительное Название Больше Нежелательная Комментарии и вещи Мой код ниже, который получает любой другой элемент штрафа. Есть идеи? allPosts = (от й в feed.Descendants ( "пункт") выбрать новый BlogPost {Creator = (строка) x.Element ( "творец"), Title = (строка) x.Element ( "титул"), Опубликован = DateTime. Разобрать ((строка) x.Element ( "PubDate" )), Содержание = (строка) x.Element ( "содержание"), Описание = (строка) x.Element ( "Описание"), Ссылка = (строка) x.Element ( "ссылка"),}). ToList ( ); Спасибо
Woody
1

голосов
1

ответ
197

Просмотры

XML-схема: Коллекция внутри специальных тегов или вдоль особых элементы?

Написание моей первой сложный XML-схему Я, возможно, все еще думая объектно-ориентированным и не уверен, что лучшие практики. Это происходит главным образом потому, что я не потратил много времени на чтение из файлов XML в коде. Одна вещь, которую я, как правило, сделать это положить все коллекции внутри его собственный элемент. Давайте придумать сценарий. Я делаю схемы для типа человека, и я wan't держать информацию о лицах, автомобилях среди других вещей. Я всегда делаю это: Но, мол, это возможно, и, возможно, даже лучше: Когда я прочитал из файла XML с помощью C # и / или Linq-to-XML, какой метод лучше? Я, как правило, делать свое дело, потому что я чувствую, что коллекция должен сидеть внутри его собственных тегов вместо наряду со свойствами, которые сингулярные как имя и адрес.
Ingó Vals
1

голосов
3

ответ
312

Просмотры

Поиск LINQ для заданного значения строки в узле

Я новичок в использовании LINQ. Я хотел бы использовать LINQ для получения определенного значения, чтобы данные string.I есть XML-документ (files.xml), который содержит ниже форматирования. 001 и списки контрольного листа CheckList и списки фальшивую 011 Информация о товаре Информация о продукте истинный Вопрос Как извлечь значение «DestinationDocumentLibrary» в виде строки для «CategoryName» из «и списков контрольного листа» с помощью LINQ. В приведенном выше примере «и списки контрольного листа» передается в качестве параметра (строки) и будет динамически передаются в запросе LINQ. Надеюсь, что вопрос ясен и много спасибо заранее.
Chin
1

голосов
1

ответ
284

Просмотры

Ошибка с помощью LINQ-to-объекты для создания XML

Как Приходите следующее дает мне ошибку вдоль линий «Только без параметров конструкторов и инициализаторах допускается в Linq To Entities». Я пытаюсь создать HTML из моих сущностей, чтобы обновить таблицу HTML с помощью AJAX. общественный класс Foo {общественности INT Bar1 {получить; задавать; } Публичная строка BAR2 {получить; задавать; } Общественного DateTime Bar3 {получить; задавать; }} XElement [] = элементы (от й в FooEntities.Foos выбрать новый XElement ( "TR", новый XElement ( "ТД", HttpUtility.HtmlEncode (x.Bar1)), новый XElement ( "ТД", HttpUtility.HtmlEncode ( x.Bar2)), новый XElement ( "TD", HttpUtility.HtmlEncode (x.Bar3)))) .ToArray (); // Ошибка XElement HTML = новый XElement ( "таблица", headerXElement, элементы);
Tom Fobear
1

голосов
1

ответ
1.5k

Просмотры

Loading resources from another project?

Я пытаюсь загрузить файл XML из отдельного проекта; Одним из таких проектов является игровым движком, который называет читатель XML документа и принимает в пути с указанием относительного каталога к файлу. От двигателя XDocument документа; попробовать {поток Поток = this.GetType () Assembly.GetManifestResourceStream (путь). док = XDocument.Load (поток); } {Улов док = XDocument.Load (путь); } С другой строки проекта Filepath = «test.xml»; Npc = новый NPC Npc ( "SomeName", 2, Filepath); Test.xml находится в корневом каталоге другого проекта. Конструктор Npc делает вызов к конструктора объекта статистики, который затем вызывает метод, который загружает XDocument. Как это происходит, Путь к файлу просто передается вниз через слои. Я смотрел на это, и попробовал встроенный пример ресурса, который в конечном счете то, что я пытаюсь достичь, и он не работает для меня. Что я делаю не так, здесь? Обновление Я изменил Text.xml к Chronos.Text.xml, поскольку именно там находится файл. В моем отладчика, я вижу, что поток просто возвращает нуль, когда я использую это как путь: попытаться {поток поток = this.GetType () Assembly.GetManifestResourceStream ( «Chronos.Test.xml»);. // возвращает нулевой DOC = XDocument.Load (поток); // Исключение брошено} {улов док = XDocument.Load (путь); //Файл не найден } Вот? Обновление Я изменил Text.xml к Chronos.Text.xml, поскольку именно там находится файл. В моем отладчика, я вижу, что поток просто возвращает нуль, когда я использую это как путь: попытаться {поток поток = this.GetType () Assembly.GetManifestResourceStream ( «Chronos.Test.xml»);. // возвращает нулевой DOC = XDocument.Load (поток); // Исключение брошено} {улов док = XDocument.Load (путь); //Файл не найден } Вот? Обновление Я изменил Text.xml к Chronos.Text.xml, поскольку именно там находится файл. В моем отладчика, я вижу, что поток просто возвращает нуль, когда я использую это как путь: попытаться {поток поток = this.GetType () Assembly.GetManifestResourceStream ( «Chronos.Test.xml»);. // возвращает нулевой DOC = XDocument.Load (поток); // Исключение брошено} {улов док = XDocument.Load (путь); //Файл не найден }
zeboidlund
1

голосов
2

ответ
274

Просмотры

Получить читателя от XNode не работает

Я пытался получить атрибуты из XNode я использую следующий код XDocument документ = XDocument.Load (FilePath); Элементы вар = от р в document.Descendants (модальность) выберите p.Elements ( "Key_Part"); // переменная Attriputess = от р в document.Descendants (модальности) выберите p.Attributes (); Еогеасп (вар элемент в элементах) {Еогеасп (вар узел в Element.Nodes ()) {XmlReader читатель = node.CreateReader (); Строка а = reader.GetAttribute ( "Тип"); }} А всегда равен нулю тип XML, как этот RRRR rrsfsfrr Я хочу, чтобы получить Key1, атрибуты Key2 и значение
AMH
1

голосов
2

ответ
224

Просмотры

How to GroupJoin from flat XDocument?

I have an XDocument with a fragment that resembles: Assume nesting is limited to the example above. I want to create a data structure - IDictionary. I can't seem to get anything to join correctly. What I have to this point is: // get lists of data nodes List pRows = xData.Elements(XName.Get("Row")) .Where(e => e.Attribute(XParentId).Value == "-1") .Select(e => e) .ToList(); List cRows = xData.Elements(XName.Get("Row")) .Where(e => e.Attribute(XParentId).Value != "-1") .Select(e => e) .ToList(); var dataSets = pRows.GroupJoin(cRows, p => p, c => c.Attribute(XParentId).Value, (p, children) => new { ParentID = p.Attribute(XId).Value, Children = children.Select(c => c) }); The compiler is complaining: The type arguments for method 'System.Linq.Enumerable.GroupJoin(System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Func, System.Func, System.Func,TResult>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. I followed a sample from MSDN using the GroupJoin. I didn't want to use 2 lists - I'd prefer to use a single list of List containing all the rows.
IAbstract
1

голосов
2

ответ
2.2k

Просмотры

Редактирование объекта с XML без создания нового экземпляра

У меня есть класс, который нужно быть Singleton. Он также должен иметь возможность загружать и сохранять свои данные поля в файле XML. Следующий метод возвращает новый экземпляр, который ломает мой Singleton шаблон, в результате чего потенциальные ошибки в своем коде. Параметры общественных нагрузки () {использования (поток Потока = File.OpenRead (имя_файл)) {XmlSerializer сериализатор = новый XmlSerializer (TypeOf (Настройки)); Возвращение (Настройки) serializer.Deserialize (поток); }} Какой метод можно использовать для того, чтобы обновить данные в моем существующем экземпляре, а не возвращать совершенно новый экземпляр? Я изучил немного Linq к Xml, но не нашел хороший пример этого. Нужно ли мне, чтобы сохранить все мои данные поля в словаре?
Bob Coder
1

голосов
1

ответ
202

Просмотры

Есть стандартный безопасный класс XmlReader, что является доказательством различной дос атак?

Я всегда могу начать писать мои собственные, но я предпочел бы не должен поддерживать его reactivley. Хотя это может сделать интересный опыт. Так что я ищу для класса XmlReader, который был оборудован устройством, предотвращающим различной дос атак (ОТДА, глубиной элемента, междоменная злобность и т.д.). Кто-нибудь есть какие-нибудь идеи? Моя единственная реальная reource атм http://msdn.microsoft.com/en-us/magazine/ee335713.aspx
John Nicholas
1

голосов
1

ответ
718

Просмотры

LINQ к XML, есть лучший способ, чтобы определить, существует ли элемент в списке?

Я работаю с LINQ к XML в VB (хотя ответы в C # являются большими, тоже). Во-первых OFF- мой код работает, так что это не критично. Тем не менее, я не могу не думать, что я делаю с условной логики уже должна быть выполнимо с помощью самого запроса LINQ. Вот что я получил: «. Получить Описание элементов в разделе ResultData где значение является„Ор Code“Dim Opcodes В списке (Of XElement) = (С с В xdoc.Descendants („ResultData“) Потомки (" Описание «) Где c.Value =„Ор Code“Выберите в) .ToList () Если opCodes.Count> 0 Then«Получаем родственный XElement первого „Описание“ XElement (там должен быть только один), используя родительский sOperator = Перерабатывать. ToString (((С с В Opcodes Выберите с) .FirstOrDefault (). Parent) .. Value) Else sOperator = "Not Available" End If Пожалуйста, не слишком критично моего метода размещения родственный nodes- в XML-файлы продуцируется тестирование устройства сторонних производителей, и это единственный универсальный способ, чтобы получить значение, мне нужно. То, что я действительно искал здесь это лучший способ справиться с блоком If. Любые мысли, предлагаемые на этом будет весьма признателен. м действительно ищут здесь это лучший способ справиться с блоком If. Любые мысли, предлагаемые на этом будет весьма признателен. м действительно ищут здесь это лучший способ справиться с блоком If. Любые мысли, предлагаемые на этом будет весьма признателен.
William Smith
1

голосов
1

ответ
92

Просмотры

Передайте данные на вид из XML

Я читал эти дни о десериализации, DOM, LINQ к XML и LINQ к XSD ... на некоторое время, но, как я новичок, я не получить всю картину, так что я постараюсь объяснить вам мой декорации: принести XML-от чужих, и я просто пытаюсь показать информацию, которая приходит с ним в представлении проекта MVC. Я на самом деле не имею XSD, так что я думаю, для десериализации его в объект, я должен использовать XSD инструмент для создания схемы, то класса, который соответствует этой схеме, а затем заполнить этот класс и использовать его в представлении. Я думаю, что это может быть сделано только с образцом XML, я прав? Другой вариант, чтобы создать «свой объект» и заполнить его с помощью DOM. Я сделал что-то подобное в последнее время (я отправил вопрос об этом) или даже попробовать некоторые из LINQ подходов (I» Ве читать LINQ к XSD был оставленную Microsoft). Для простой вещи, что я пытаюсь сделать, я бы пойти на LINQ к XML, но если честно, я полностью не понимаю, все различия, которые я читал о преимуществах и недостатках различных подходов, так что если кто-то может мне помочь чтобы решить, я действительно ценю это. заранее спасибо
mitomed
1

голосов
2

ответ
235

Просмотры

Наполнение выпадающего списка с другим

Я заселение один DDL с другой, если мы выбираем название страны в DDL, соответствующее состояние должно появиться в другом DDL ниже мой код защищен недействительным DropDownList1_SelectedIndexChanged (объект отправителя, EventArgs е) {строка й = (DropDownList1.SelectedIndex) .ToString (); XDocument главное = XDocument.Load ((Server.MapPath (@ "XMLFile1.xml"))); вар запрос = от пользователя в main.Descendants ( «страна»), где й == user.Element ( «состояние») Значение выбора пользователь. DropDownList2.DataSource = запрос; DropDownList2.DataBind (); } Но я не могу заселить состояния в другое DDL может кто-нибудь помочь мне с этим?
user1435482
1

голосов
1

ответ
84

Просмотры

Загрузка значений в DDL с помощью LINQ к XML

Я хочу, чтобы отобразить значения в DDL с помощью XML-файла, и я с помощью LINQ к XML Индия Махараштра Кашмир Гоа Шри-Ланка Kanady Colombo Галле Австралия Сидней Перт Мельбурн Южная Африка Кейптаунской Johanusburg Дурбан общественности статической IEnumerable bindstate () {уаг состояние = из Ь в . GetData () Потомки (( "состояние")) OrderBy (строка) b.Element ( "текст") выберите (строка) b.Element ( "текст"); вернуть состояние; } Но я не получаю все государства я получаю только первое состояние в каждой стране, как я могу получить все государства?
Chandra sekhar
1

голосов
1

ответ
84

Просмотры

Можно ли сделать LINQ к XML динамический?

Динамический не может быть наилучшим образом использовать слово здесь, но я приведу пример того, что я имею в виду: у меня есть некоторые конфигурационные файлы в формате XML, и мне нужно, чтобы получить доступ к определенным элементам этих конфигурационных файлов. На данный момент в коде, я делаю что-то вроде:. Струнной имя_сервера = elements.Element ( «Сервер») Значение; Выше все хорошо, если сервер остается как дочерний элемент элементов, но если он движется, я бы изменить код. Одно из решений, я думал о том, чтобы использовать XPATH выражения, определенные в какой-то файл, который я бы загружать во время выполнения и если элемент или атрибут, который я искал изменилось, я бы не изменить код, я бы просто изменить выражение XPATH , Является ли это жизнеспособный подход, или есть другое решение этой проблемы?
Xaisoft
1

голосов
1

ответ
815

Просмотры

LINQ to XML join issue

I'm having real trouble with a join that I am trying to perform on two separate XML files. I have two classes that describe each object that I extract from the XML files, they are public class XMLCustomers { public String CustomerID { get; set; } public String ContactName { get; set; } } and public class XMLOrders { public String OrderID { get; set; } public String CustomerID { get; set; } public String OrderDate { get; set; } public String ShippedDate { get; set; } public String Freight { get; set; } public String ShipName { get; set; } public String ShipCity { get; set; } public String ShipCountry { get; set; } } And my last class stores the join that I perform on the two sets of data. public class PostXMLJoinOrder { public String OrderID { get; set;} public String ContactName { get; set;} public String OrderDate { get; set;} public String ShippedDate { get; set;} public String Freight { get; set;} public String ShipName { get; set;} public String ShipCity { get; set;} public String ShipCountry { get; set;} } Finally these are my two methods that load the information from the XML files and the third method performs a join and stores the information in a IEnumerable public IEnumerable LoadXMLCustomers() { var custs = from x in XElement.Load(System.Web.HttpContext.Current.Server.MapPath(@"~\App_Data\XCustomers.xml")).Elements() select new XMLCustomers { ContactName = x.Attribute("ContactName").Value, CustomerID = x.Attribute("CustomerID").Value }; int size = custs.Count(); return custs; } public IEnumerable LoadXMLOrders() { var ords = from x in XElement.Load(System.Web.HttpContext.Current.Server.MapPath(@"~\App_Data\XOrders.xml")).Elements() select new XMLOrders { OrderID = x.Attribute("ContactName").Value, CustomerID = x.Attribute("CustomerID").Value, OrderDate = x.Attribute("OrderDate").Value, ShippedDate = x.Attribute("ShippedDate").Value, Freight = x.Attribute("Freight").Value, ShipName = x.Attribute("ShipName").Value, ShipCity = x.Attribute("ShipCity").Value, ShipCountry = x.Attribute("ShipCountry").Value }; int size = ords.Count(); return ords; } public IEnumerable LoadPostXMLJoinOrders() { var joinQuery = from customer in LoadXMLCustomers() from orders in LoadXMLOrders() where customer.CustomerID == orders.CustomerID select new PostXMLJoinOrder { OrderID = orders.OrderID, ContactName = customer.ContactName, OrderDate = orders.OrderDate, ShippedDate = orders.ShippedDate, Freight = orders.Freight, ShipName = orders.ShipName, ShipCity = orders.ShipCity, ShipCountry = orders.ShipCountry }; return joinQuery; } I have tested the amount of items returned from my LINQ and it continues to be 0; I have double checked everything being loaded in from the files but I cant seem to get my head around at which point its going wrong. Edit: its a loading issue. the XML files are definitely stored under the correct App_Data folder. But when the individial LoadXMLCustomers() is running Im getting a NullReferenceException at the part where the lINQ statement selects and creates the new Loaded Customer object. I have already made sure the build for the XML documents are content and copyToOutputDirectory is set to if newer this is the Exception & Also the var value is null so its definitely not loading for some reason: SOLVED: The lesson I learnt here is that you need to pay close attention to your XML and data. If some of your XML data has empty values, then you need to account by making sure the select statement can handle it. Above I had the code select new XMLOrders { OrderID = x.Attribute("ContactName").Value, CustomerID = x.Attribute("CustomerID").Value, OrderDate = x.Attribute("OrderDate").Value, ShippedDate = x.Attribute("ShippedDate").Value, Freight = x.Attribute("Freight").Value, ShipName = x.Attribute("ShipName").Value, ShipCity = x.Attribute("ShipCity").Value, ShipCountry = x.Attribute("ShipCountry").Value }; Which really should have included casts to string values so if there is empty data is "" not throwing a null exception. Secondly I should have been getting the Element values not the Attribute values. select new XMLOrders { OrderID = (string)x.Element("OrderID").Value, CustomerID = (string)x.Element("CustomerID").Value, OrderDate = (string)x.Element("OrderDate").Value, ShippedDate = (string)x.Element("ShippedDate").Value, Freight = (string)x.Element("Freight").Value, ShipName = (string)x.Element("ShipName").Value, ShipCity = (string)x.Element("ShipCity").Value, ShipCountry = (string)x.Element("ShipCountry").Value };
gazma
1

голосов
1

ответ
1.4k

Просмотры

Linq для XML выбрать новый PurchaseOrder

Я пытаюсь получить мою голову Arround «Linq для XML», поэтому позвольте мне перейти прямо к нему. У меня есть этот XML: Эллен Адамс 123 Maple Street Mill Valley CA 10999 USA Tai Yee 8 Oak Avenue Old Town PA 95819 USA Пожалуйста выйдите пакеты пролили дорогу. Газонокосилка 1 148,95 Подтвердить это электрический Baby Monitor 2 39,98 1999-05-21 И тогда я создал сом простых объектов: общественный класс PurchaseOrder {общественных струнный PurchaseOrderNumber {получить; задавать; } Публичная строка OrderDate {получить; задавать; } Общественности Адрес BillingAddress {получить; задавать; } Общественности Адрес ShippingAddress {получить; задавать; } публичная строка DeliveryNotes {получить; задавать; } общественности элементы списка {получить; задавать; }} Общественного класс Address {общественной строки типа {получить; задавать; } Публичная строка Name {получить; задавать; } Публичная строка Street {получить; задавать; } Публичная строка Город {получить; задавать; } Строка Государственной публичной {получить; задавать; } Публичная строка Zip {получить; задавать; } Публичная строка Страна {получить; задавать; }} Общественного класса Item {общественная строка PartNumber {получить; задавать; } Публичная строка ProductName {получить; задавать; } Публичная строка Количество {получить; задавать; } Публичная строка USPrice {получить; задавать; } Публичная строка Комментарий {получить; задавать; }} Затем я идти вперед сделать мою LINQ:. Var заказы = (от заказа в XDocument.Load (Server.MapPath ( "/ App_Data / Order.xml")) Потомки ( "PurchaseOrder") выбрать новый PurchaseOrder {PurchaseOrderNumber = порядок .attribute ( "PurchaseOrderNumber"). Value, ? Во-вторых, как я получаю «Type» (который является атрибутом) для адреса? В-третьих, как я делаю перечень предметов, этот «Items = нуль», так что у меня есть полностью функциональный объект для работы с? И, наконец, если остальная часть LINQ нуждается в настройке сом затем идти вперед и Guid меня в правильном направлении; о)
Martin Overgaard
1

голосов
1

ответ
3.8k

Просмотры

Read multiple xml tables (under the same Root node) into DataTables/DataSet

I have an XML source document with multiple "report" nodes under the Root node. I need to read each "report" node into its own DataTable. It looks like I'll either need to transform my source XML data using an xsl stylesheet to get it in the format that'll work nicely or iterate through my xml elements like so: namespace XmlParse2 { class Program { static IEnumerable expectedFields = new List() { "Field1", "Field2", "Field3", "Field4" }; static void Main(string[] args) { string xml = @" data1-1 data1-2 data1-4 data2-1 data2-2 data1-1 data1-4 data2-1 data2-3 "; DataTable report1 = new DataTable("Report1"); report1.Columns.Add("Field1"); report1.Columns.Add("Field2"); report1.Columns.Add("Field3"); report1.Columns.Add("Field4"); DataTable report2 = new DataTable("Report2"); report2.Columns.Add("Field1"); report2.Columns.Add("Field2"); report2.Columns.Add("Field3"); report2.Columns.Add("Field4"); var doc = XDocument.Parse(xml); var report1Data = doc.Root.Elements("Report1").Elements("Row").Select(record => MapRecord(record)); var report2Data = doc.Root.Elements("Report2").Elements("Row").Select(record => MapRecord(record)); report1 = addRows(report1, report1Data); report2 = addRows(report2, report2Data); Console.ReadLine(); } public static Dictionary MapRecord(XElement element) { var output = new Dictionary(); foreach (var field in expectedFields) { bool hasField = element.Elements(field).Any(); if (hasField) { output.Add(field, element.Elements(field).First().Value); } } return output; } public static DataTable addRows(DataTable table, IEnumerable data) { foreach (Dictionary dict in data) { DataRow row = table.NewRow(); foreach(var item in dict) { row[item.Key] = item.Value; } table.Rows.Add(row); } return table; } } } The problem with my source data not working seems to be that both Report1 and Report2 have child nodes that are named "Row" and my attempts to do stuff using DataSet.ReadXml is not successful because my code just groups all nodes named Row into one DataTable instead of separate DataTables. :/ What am I missing?
programmer
1

голосов
1

ответ
135

Просмотры

Converting an awkward xml document structure into a friendly one

Okay, so I have an auto-generated xml file which represents a certain folder structure in a library: One 0 Two 1 Three 2 Four 3 Five 2 Six 3 Seven 3 Eight 1 However, I need it to look more human-friendly and less awkward in a following structure: I have been looking at it for quite a while already and I am lacking any ideas as to how to wrap it into a method. Any suggestions would be highly appreciated. So far I have been successfull with putting it into objects of my class, which looks like this: class MyFolder { private List _folders; public List Folders { get { if (_folders == null) { _folders = new List(); } return _folders; } set { _folders = value; } } public string Name { get; set; } } Don't know if this leads me anywhere to be honest, I now have a MyFolder which has MyFolders which have other MyFolders etc, hopefully this makes sense.
Rafał Saltarski
1

голосов
1

ответ
144

Просмотры

Linq лямбда присоединиться выражение XML

AttributeID = v.Element ( "AttributeID") Значение}). Я имею в виду, чтобы присоединиться к этому результату с «AttributeType_Table» элемент «AttributeID».
Srinivas Adari
1

голосов
1

ответ
771

Просмотры

InvalidOperationException when trying to add XElement to XDocument

Я получаю эту ошибку, когда я пытаюсь добавить XElement в XDocument: исключение типа «System.InvalidOperationException» произошло в System.Xml.Linq.ni.dll, но не был обработан в пользовательском коде Мой код: Imports System .xml Импорт System.Xml.Linq Импорт System.IO.IsolatedStorage Импорт System.IO Public Sub SaveRecord () Использование myIsolatedStorage Как IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication () Dim док Как XDocument Использование isoStore1 Как IsolatedStorageFile = _ IsolatedStorageFile.GetUserStoreForApplication () Использование isoStream1 Как IsolatedStorageFileStream = Новый IsolatedStorageFileStream ( "file.xml", FileMode.Open, isoStore1) документ = XDocument.Load (isoStream1) MessageBox.Show (док.ToString) 'Это дает правильный XML-код doc.Add (Новый XElement ( "NewChild", "новое содержание")) Это где ошибка происходит MessageBox.Show (doc.ToString) Использование isoStore Как IsolatedStorageFile = IsolatedStorageFile. GetUserStoreForApplication () Использование isoStream Как IsolatedStorageFileStream = Новый IsolatedStorageFileStream ( "file.xml", FileMode.Create, isoStore) doc.Save (isoStream) End Using End Using End Using End Using End Использование Exit Sub End Sub ошибка появляется, когда отладчик входит линия doc.Add (нью-XElement ( «NewChild», «новое содержание»)) Может кто-нибудь объяснить мне, что причина этой ошибки и как я могу решить эту проблему?
G. Derks

Просмотр дополнительных вопросов