Đọc thuộc tính XML bằng XmlDocument


79

Làm cách nào để đọc thuộc tính XML bằng XmlDocument của C #?

Tôi có một tệp XML trông giống như sau:

<?xml version="1.0" encoding="utf-8" ?>
<MyConfiguration xmlns="http://tempuri.org/myOwnSchema.xsd" SuperNumber="1" SuperString="whipcream">
    <Other stuff />
</MyConfiguration> 

Làm cách nào để đọc các thuộc tính XML SuperNumber và SuperString?

Hiện tại tôi đang sử dụng XmlDocument và tôi nhận được các giá trị giữa việc sử dụng XmlDocument GetElementsByTagName()và điều đó thực sự hoạt động tốt. Tôi chỉ không thể tìm ra cách lấy các thuộc tính?

Câu trả lời:


114
XmlNodeList elemList = doc.GetElementsByTagName(...);
for (int i = 0; i < elemList.Count; i++)
{
    string attrVal = elemList[i].Attributes["SuperString"].Value;
}

cảm ơn bạn rất nhiều. nó thực sự hoạt động và nó không cần bất kỳ đường dẫn nào và không cần gì cả. đơn giản là tuyệt vời!!
Nani

88

Bạn nên xem xét XPath . Khi bạn bắt đầu sử dụng nó, bạn sẽ thấy nó hiệu quả hơn và dễ viết mã hơn rất nhiều so với việc lặp qua các danh sách. Nó cũng cho phép bạn trực tiếp có được những thứ bạn muốn.

Sau đó, mã sẽ tương tự như

string attrVal = doc.SelectSingleNode("/MyConfiguration/@SuperNumber").Value;

Lưu ý rằng XPath 3.0 đã trở thành Khuyến nghị của W3C vào ngày 8 tháng 4 năm 2014.


8

Bạn có thể di chuyển sang XDocument thay vì XmlDocument và sau đó sử dụng Linq nếu bạn thích cú pháp đó. Cái gì đó như:

var q = (from myConfig in xDoc.Elements("MyConfiguration")
         select myConfig.Attribute("SuperString").Value)
         .First();

8

Tôi có một tệp Xml books.xml

<ParameterDBConfig>
    <ID Definition="1" />
</ParameterDBConfig>

Chương trình:

XmlDocument doc = new XmlDocument();
doc.Load("D:/siva/books.xml");
XmlNodeList elemList = doc.GetElementsByTagName("ID");     
for (int i = 0; i < elemList.Count; i++)     
{
    string attrVal = elemList[i].Attributes["Definition"].Value;
}

Bây giờ, attrValcó giá trị của ID.


5

XmlDocument.Attributescó lẽ? (Có phương thức GetNamedItem có lẽ sẽ làm những gì bạn muốn, mặc dù tôi luôn lặp lại bộ sưu tập thuộc tính)


1

Giả sử tài liệu mẫu của bạn nằm trong biến chuỗi doc

> XDocument.Parse(doc).Root.Attribute("SuperNumber")
1

1

Nếu XML của bạn chứa không gian tên, thì bạn có thể làm như sau để nhận giá trị của thuộc tính:

var xmlDoc = new XmlDocument();

// content is your XML as string
xmlDoc.LoadXml(content);

XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());

// make sure the namespace identifier, URN in this case, matches what you have in your XML 
nsmgr.AddNamespace("ns", "urn:oasis:names:tc:SAML:2.0:protocol");

// get the value of Destination attribute from within the Response node with a prefix who's identifier is "urn:oasis:names:tc:SAML:2.0:protocol" using XPath
var str = xmlDoc.SelectSingleNode("/ns:Response/@Destination", nsmgr);
if (str != null)
{
    Console.WriteLine(str.Value);
}

Thông tin thêm về không gian tên XML tại đâytại đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.