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@email.ext</email>
<birthdate>2002-09-22</birthdate>
<telephone>000:000000</telephone>
<description>Description for this contact</description>
</contact>
<contact>
<name>sss</name>
<email>email@email.ext</email>
<birthdate>2002-09-22</birthdate>
<telephone>000:000000</telephone>
<description>Description for this contact</description>
</contact>
<contact>
<name>bbb</name>
<email>email@email.ext</email>
<birthdate>2002-09-22</birthdate>
<telephone>000:000000</telephone>
<description>Description for this contact</description>
</contact>
<contact>
<name>ccc</name>
<email>email@email.ext</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);
OK、すべて気にしないでください。これに注目してください。
ルートノードを取得すると、大丈夫です。正しく取得できます。
select ディレクティブを使用すると、すべてのノードが次のように表示されます: from e in
XRoot.Elements("contact")
問題はここにあります: from e in XRoot.Elements() を使用すると、すべての連絡先ノードが取得されますが、from e in XRoot.Elements("contact") を使用すると、何も取得されません: 空のセット。
OK 教えてください: もう 1 つを使用してください: OK I DO SO, let's use:
from e in XRoot.Elements()
, とにかくすべてのノードを取得します, それは正しいですが、ここで別の問題が発生します: 言うとき: select new Contact((string)e.Element("name"), (string)e.Element("email"), "1-1-1", null, null);
I Try to access <name>, <email>
... I HAVE TO USE .Element ("名前") そしてそれも機能しません!!!!!!!!これは一体何ですか????????????? パスした名前と一致しないようですが、どうしてそれが可能なのでしょうか。Elements() 関数は、オーバーロードされた、文字列にマップされる XName である 1 つの引数を取ることを知っています。私が書いたコードは例に基づいていると考えてください。うまくいくはずです。