2013-05-29 85 views
-1

首先,我向您展示了我的XML文檔,然後我想使用C#代碼讀取這些值,但在此處我收到了用戶名usr &密碼pwd只。無法在XML文檔中獲取完整的用戶詳細信息

<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查詢有什麼問題?

+1

目前尚不清楚你的問題是什麼。你爲什麼認爲你沒有得到兩個用戶的詳細信息? –

+0

您的XML無效。 – Romoku

+0

@Romoku:它只是缺少一個關閉的'用戶'標籤。我認爲這不是問題。 –

回答

1

因爲每次您設置UsernamePassword您正在創建立即超出範圍的新變量(具體取決於Some coding goes here的實際情況)。創建一些更高級的作用域變量並將值存儲在那裏,但即使這樣,每次都會覆蓋相同的值,因此只能以最後一個憑據集結束 - 因此,請使用集合來存儲它們。

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

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

如果你正在查詢值內循環,然後我可以糾正,但它不明確其中你期望使用這些(例如,重用緊密範圍的變量可能是完全有效的,如果這是案件)。

+0

這裏我試了這個。它也讀取了第二個值。 username - abc&password - def not reading – TechGuy

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(); 
+1

它顯示「System.XML.XMLNodeList」不包含'Select'的定義,'Select'....沒有擴展方法等。 – TechGuy

+0

@ Sonic99你需要使用' XDocument' – Damith

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); 
} 
0
public List<UserDetails> GetUserDetails() 
     { 
      XDocument xDOC = XDocument.Load(Application.StartupPath+"\\load.xml"); 
      List<UserDetails> retVal = (from xele in xDOC.Descendants("User") 
             select new UserDetails 
             { 
              UserName = xele.Element("username").Value, 
              Password = xele.Element("password").Value 
             }).ToList<UserDetails>(); 

      return retVal; 

     } 
    } 

    public class UserDetails 
    { 
     public string UserName { get; set; } 
     public string Password { get; set; } 
    } 
相關問題