2017-04-20 20 views
1

我需要一些幫助。我有這樣的XML:Xml路徑如何讀取屬性名稱

<?xml version='1.0' encoding='utf-8'?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
    </session-factory> 
</hibernate-configuration> 

,我想讀的屬性名和值(值

之間我做了這樣的事情

XPathNodeIterator iterator = nav.Select("/nh:hibernate-configuration/nh:session-factory/nh:property/@name", manager); 
XPathNodeIterator iterator2 = nav.Select("/nh:hibernate-configuration/nh:session-factory/nh:property", manager); 

while (iterator.MoveNext() && iterator2.MoveNext()) 
{ 
    var name = iterator.Current.Value; 
    var property = iterator2.Current.Value; 
} 

,但有可能在這種情況下只有一個迭代器可用於獲取名稱和屬性?

回答

0

您只能使用第二個迭代器並使用GetAttribute()來讀取name屬性值:

XPathNodeIterator iterator2 = nav.Select("/nh:hibernate-configuration/nh:session-factory/nh:property", manager); 
while (iterator2.MoveNext()) 
{ 
    var navigator = iterator.Current; 
    var name = navigator.GetAttribute("name",""); 
    var property = navigator.Value; 
} 

不管怎樣,整個任務可以使用XmlDocument,或使用LINQ到XML簡單得多,如下面所示:

var doc = XDocument.Load("path_to_your_xml.xml"); 
XNamespace d = "urn:nhibernate-configuration-2.2"; 
foreach(var prop in doc.Descendants(d+"property") 
{ 
    var name = (string)prop.Attribute("name"); 
    var property = (string)prop; 
}