У меня проблема с использованием Linq To Xml.
Простой код. У меня есть этот XML:
<?xml version="1.0" encoding="utf-8" ?>
<data xmlns="http://www.example.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/directory file.xsd">
<contact>
<name>aaa</name>
<email>[email protected]</email>
<birthdate>2002-09-22</birthdate>
<telephone>000:000000</telephone>
<description>Description for this contact</description>
</contact>
<contact>
<name>sss</name>
<email>[email protected]</email>
<birthdate>2002-09-22</birthdate>
<telephone>000:000000</telephone>
<description>Description for this contact</description>
</contact>
<contact>
<name>bbb</name>
<email>[email protected]</email>
<birthdate>2002-09-22</birthdate>
<telephone>000:000000</telephone>
<description>Description for this contact</description>
</contact>
<contact>
<name>ccc</name>
<email>[email protected]</email>
<birthdate>2002-09-22</birthdate>
<telephone>000:000000</telephone>
<description>Description for this contact</description>
</contact>
Я хочу, чтобы каждый контакт отображал его на объекте Contact. Для этого я использую этот фрагмент кода:
XDocument XDoc = XDocument.Load(System.Web.HttpRuntime.AppDomainAppPath + this.filesource);
XElement XRoot = XDoc.Root;
//XElement XEl = XElement.Load(this.filesource);
var results = from e in XRoot.Elements("contact")
select new Contact((string)e.Element("name"), (string)e.Element("email"), "1-1-1", null, null);
List<Contact> cntcts = new List<Contact>();
foreach (Contact cntct in results) {
cntcts.Add(cntct);
}
Contact[] c = cntcts.ToArray();
// Encapsulating element
Elements<Contact> final = new Elements<Contact>(c);
Хорошо, просто не обращайте внимания на все это: сосредоточьтесь на этом:
Когда я получаю корневой узел, все в порядке, я получаю его правильно.
Когда я использую директиву select, я пытаюсь заставить каждый узел сказать: from e in
XRoot.Elements("contact")
Хорошо, вот проблема: если я использую: from e в XRoot.Elements(), я получаю все контактные узлы, но если я использую: from e в XRoot.Elements("contact"), Я НИЧЕГО НЕ ПОЛУЧАЮ: пустой НАБОР.
ОК, вы говорите мне: Используйте другой: ОК, Я ДЕЛАЮ ТАК, давайте использовать: from e in XRoot.Elements()
, я все равно получаю все узлы, ЭТО ПРАВИЛЬНО, НО ЗДЕСЬ ВОЗНИКАЕТ ДРУГАЯ ПРОБЛЕМА: Говоря: select new Contact((string)e.Element("name"), (string)e.Element("email"), "1-1-1", null, null);
Я пытаюсь получить доступ к <name>, <email>
... Я ДОЛЖЕН ИСПОЛЬЗУЙТЕ .Element("name") И ЭТО ТОЖЕ НЕ РАБОТАЕТ!!!!!!!!ЧТО ЭТО ЗА ХЕРНЯ????????????? КАЖЕТСЯ, ЧТО Я НЕ СООТВЕТСТВУЮ ИМЯ, КОТОРОЕ Я ПЕРЕДАЮ Но как это возможно. Я знаю, что функция Elements() принимает перегруженный один аргумент, который является XName, который отображается в строку. Пожалуйста, учтите, что код, который я написал, взят из примера. Он должен работать.