Имам проблем с използването на 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>
Искам всеки контакт да го картографира върху обект Контакт. За да направя това, използвам този фрагмент от код:
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"), НЕ ПОЛУЧАВАМ НИЩО: Празен SET.
ОК, ти ми кажи: Използвай другия: ОК, ПРАВЯ ТАКА, нека използвам: from e in XRoot.Elements()
, така или иначе получавам всички възли, ТОВА Е ПРАВИЛНО, НО ТУК ИДВА ДРУГИЯТ ПРОБЛЕМ: Когато казваш: select new Contact((string)e.Element("name"), (string)e.Element("email"), "1-1-1", null, null);
Опитвам се да осъществя достъп до <name>, <email>
... ТРЯБВА ДА ИЗПОЛЗВАЙТЕ .Element("име") И ТОВА СЪЩО НЕ РАБОТИ!!!!!!!!КАКВО ПО ДЯВОЛИТЕ Е ТОВА????????????? ИЗГЛЕЖДА, ЧЕ НЕ СЪВПАДА С ИМЕТО, КОЕТО МИНАВАМ Но как е възможно. Знам, че функцията Elements() приема, претоварен, един аргумент, който е XName, който е картографиран върху низ. Моля, имайте предвид, че кодът, който написах, идва от пример, трябва да работи.