2014-03-31 22 views
0

我想從XML文件使用XMLNode讀取多個屬性,但取決於元素,該屬性可能不存在。在屬性不存在的情況下,如果我嘗試將其讀入內存,它將拋出一個空異常。我發現,測試,如果屬性返回null一種方式:如何檢查多個XMLNode屬性的空值?

var temp = xn.Attributes["name"].Value; 
if (temp == null) 
{ txtbxName.Text = ""; } 
else 
{ txtbxName.Text = temp; } 

這似乎是它會爲單個實例的工作,但如果我檢查20屬性,這些屬性可能不存在,我希望有一種方法要設置一個方法,我可以傳遞值來測試它是否爲空。從我讀過的你不能傳遞一個var,因爲它是在本地初始化的,但是有沒有辦法讓我設置一個測試來傳遞一個可能的空值來測試,然後返回值,如果它不是null,並返回「」如果它是空的?是否有可能,或者是否必須按照上面所述單獨測試每個值?如果您使用的XDocument你可以只使用LINQ找到你想要的所有節點

txtbxName.Text = GetText(xn, "name"); 
+0

爲什麼使用'XmlDocument'? Linq2XML是更好的選擇。 –

+0

我剛開始使用xml解析,並且比使用LINQtoSQL更容易使用XMLDocument。 –

回答

2

您可以創建這樣的方法:

public static string GetText(XmlNode xn, string attrName) 
{ 
    var attr = xn.Attributes[attrName]; 
    if (attr == null). // Also check whether the attribute does not exist at all 
     return string.Empty; 
    var temp = attr.Value; 
    if (temp == null) 
     return string.Empty; 
    return temp; 
} 

而且這樣稱呼它。

var names = (from attr in doc.Document.Descendants().Attributes() 
      where attr.Name == "name" 
      select attr).ToList(); 

如果使用XmlDocument出於某種原因,你可以選擇你想使用XPath的節點。 (我的XPath很生鏽)。

var doc = new XmlDocument(); 
doc.Load("the file"); 
var names = doc.SelectNodes("//[Name=\"name\""); 
0