-1

最初にここに私の XML ドキュメントを示します。次に、C# コードを使用してこれらの値を読みたかったのですが、ここでは Username usr と Password pwd Only を受け取りました。

<Users>
  <user>
    <username>abc</username>
    <password>def</password>
  </user>
  <user>
    <username>usr</username>
    <password>pwd</password>
  </user>
</Users>

Java コード:

 private void Form1_Load(object sender, EventArgs e)
    {

        XmlDocument xDoc = new XmlDocument();
        xDoc.Load(Application.StartupPath+"\\load.xml");

        foreach (XmlNode node in xDoc.SelectNodes("//Users/user"))
        {
            string Username = node.FirstChild.InnerText;
            string Password = node.LastChild.InnerText;


          // Some coding goes here
        }

    }

両方のユーザーの詳細が必要です。XPath クエリの何が問題になっていますか?

4

4 に答える 4

1

設定するたびに、すぐに範囲外になる新しい変数を作成しているUsernameためです(実際に何があるかによって異なります)。より高いレベルのスコープ変数をいくつか作成し、そこに値を保存しますが、それでも毎回同じ値を上書きするため、最後の資格情報セットのみになるため、コレクションを使用してそれらを保存します。PasswordSome coding goes here

var credentials = new List<KeyValuePair<string, string>>();

credentials.Add(new KeyValuePair<string, string>(
  node.FirstChild.InnerText, node.LastChild.InnerText)
);

ループ内でクエリされた値を使用して何かを行っている場合、私は修正することができますが、これらをどこで使用すると予想されるかは明確ではありません(たとえば、厳密にスコープされた変数を再利用することは、その場合には完全に有効かもしれません)。

于 2013-05-29T11:34:36.810 に答える
1

を使用しXmlSerializerて要素を抽出できます。

クラス:

[XmlRoot("users")]
public class UserResult
{
    [XmlElement("user")]
    public List<User> Users { get; set; }
}

public class User
{
    [XmlElement("username")]
    public string UserName { get; set; }

    [XmlElement("password")]
    public string Password { get; set; }
}

使用法:

var xml = @"<users>
<user>
<username>abc</username>
<password>def</password>
</user>
<user>
<username>usr</username>
<password>pwd</password>
</user>
</users>";

var document = new XmlDocument();
document.LoadXml(xml);

UserResult result;
var serializer = new XmlSerializer(typeof(UserResult));

using(var reader = new StringReader(xml))
{
    result = serializer.Deserialize(reader);
}
于 2013-05-29T11:50:33.457 に答える
1

試す

var xDoc= XDocument.Load(Application.StartupPath+"\\load.xml");

var userlist = xDoc.Descendants("users").Descendants("user")
            .Select(u => new {
                                Username = u.Element("username").Value,
                                Password = u.Element("password").Value
                            }).ToList();
于 2013-05-29T11:37:35.223 に答える