2014-10-16 52 views
0

我有簡單的XML,如:C#的XmlReader簡單的XML

<?xml version="1.0" encoding="utf-8"?> 
<ftp> 
    <address>ftp://ftp.example.com/</address> 
    <user>jondoe</user> 
    <password>Password123</password> 
</ftp> 

,我想用這個C#代碼:

using (XmlReader reader = XmlReader.Create(xmlPath)) 
{ 
    reader.ReadToFollowing("address"); 
    string ftpAddress = reader.ReadElementContentAsString(); 
    reader.ReadToFollowing("user"); 
    string ftpUser = reader.ReadElementContentAsString(); 
    reader.ReadToFollowing("password"); 
    string ftpPw = reader.ReadElementContentAsString(); 
} 

它的正常工作時,我想讀的只有一個內容,像地址,但是當我想閱讀更多/下一個時,它失敗了。我認爲這將是合乎邏輯的,但似乎並非如此。如何閱讀XML及其所有元素:地址,用戶名和密碼?我想爲此使用XmlReader。

+2

你有沒有考慮創建一個基本視圖模型,然後反序列化XML到您的視圖模式? – KnottytOmo 2014-10-16 13:26:04

+0

我只想要一個簡單的方法來讀取該XML。沒有像XML的建築視圖模型那麼廣泛。 – 2014-10-16 13:27:12

回答

1

我能想到的最簡單的形式是這樣:

XElement xml = XElement.Parse(File.ReadAllText(xmlPath)); 
var ftpAddress = xml.Element("address").Value; 
var ftpUser = xml.Element("user").Value; 
var ftpPwd = xml.Element("user").Value; 

當然,你應該檢查空值,如果該文件存在添加一些安全..

更新:

我會實現故障安全的版本是這樣的:

if (!File.Exists(xmlPath)) 
    throw new FileNotFoundException(string.Format("The FTP configuration file {0} is missing", xmlPath)); 

XElement xml = XElement.Parse(File.ReadAllText(xmlPath)); 
var ftpAddress = GetConfigValue(xml, "address"); 
var ftpUser = GetConfigValue(xml, "user"); 
var ftpPwd = GetConfigValue(xml, "password"); 

隨着GetConfigValue這樣的:

private static string GetConfigValue(XContainer parent, XName name) 
{ 
    var element = parent.Element(name); 

    if (element == null) 
     throw new ArgumentException(string.Format("Invalid configuration file, missing element {0}", name)); 

    return element.Value; 
} 
+0

謝謝。它工作得很好。你能告訴我如何以簡單/優雅的方式進行安全檢查嗎? – 2014-10-16 13:49:13

+0

謝謝丹尼斯托馬斯,這就是我需要的! – 2014-10-16 21:39:33