1

xDoc変数はXMLコンテンツをロードしますが、情報を取得できません。NULLに戻ります:

var xDoc = XDocument.Load(Config.CredentialFileName);

//method 1
IEnumerable<XElement> rows = from row in xDoc.Descendants("domain")
                             where (string)row.Attribute("name") == "TEST"
                             select row;
//method 2
var list = xDoc.Descendants("domain")
    .Select(d => new
    {
        name = d.Attribute("name").Value,
        username = d.Attribute("username").Value,
        password = d.Attribute("password").Value //,
    })
    .Where(a => a.name == "TEST")
    .ToList();

XMLファイル:

<domains>
  <domain name="TEST" userName="test" password="tSEvmlsmwEkjSxUwrCVf3G6"/>
</domains>

ありがとうございました

4

2 に答える 2

1

最初の方法は、指定したxmlで問題なく機能します。まったく同じ構造のxmlを解析していることを確認してください。また、名前が。に等しいドメイン要素が少なくとも1つあることを確認してくださいTEST。また、xmlで名前空間が定義されていないことを確認してください。

2番目のメソッドの属性名にタイプミスがありuserNameます(小文字がありますusername):

var list = xDoc.Descendants("domain")
                .Select(d => new {
                    name = d.Attribute("name").Value,
                    username = d.Attribute("userName").Value, // <-- typo here
                    password = d.Attribute("password").Value
                })
                .Where(a => a.name == "TEST")
                .ToList();

Valueまた、ノードが存在しない場合、このプロパティを取得すると例外がスローされるため、ノードプロパティを読み取る代わりにキャストを使用することをお勧めします。

var domains = from d in xDoc.Descendants("domain")
              let name = (string)d.Attribute("name")
              where name == "TEST"
              select new {
                  Name = name,
                  Username = (string)d.Attribute("userName"),
                  Password = (string)d.Attribute("password")
              };
于 2013-01-04T23:02:06.993 に答える
0

下記参照。

  var xDoc= XElement.Load(Config.CredentialFileName);             

var result =  xDoc.Elements("domain").Where(x => x.Attribute("name").Value.Equals("TEST")).ToList();
于 2013-01-04T22:48:11.480 に答える