Ответ 1
XmlNodeList elemList = doc.GetElementsByTagName(...);
for (int i = 0; i < elemList.Count; i++)
{
string attrVal = elemList[i].Attributes["SuperString"].Value;
}
Как я могу прочитать атрибут XML с помощью С# XmlDocument?
У меня есть XML файл, который выглядит примерно так:
<?xml version="1.0" encoding="utf-8" ?>
<MyConfiguration xmlns="http://tempuri.org/myOwnSchema.xsd" SuperNumber="1" SuperString="whipcream">
<Other stuff />
</MyConfiguration>
Как я прочитал бы атрибуты XML SuperNumber и SuperString?
В настоящее время я использую XmlDocument, и получаю значения между ними, используя XmlDocument GetElementsByTagName()
, и это работает очень хорошо. Я просто не могу понять, как получить атрибуты?
XmlNodeList elemList = doc.GetElementsByTagName(...);
for (int i = 0; i < elemList.Count; i++)
{
string attrVal = elemList[i].Attributes["SuperString"].Value;
}
Вы должны посмотреть XPath. После того, как вы начнете использовать его, вы найдете его намного более эффективным и простым в использовании, чем повторение списков. Он также позволяет вам напрямую получать нужные вещи.
Тогда код будет похож на
string attrVal = doc.SelectSingleNode("/MyConfiguration/@SuperNumber").Value;
Вы можете перейти на XDocument вместо XmlDocument, а затем использовать Linq, если вы предпочитаете этот синтаксис. Что-то вроде:
var q = (from myConfig in xDoc.Elements("MyConfiguration")
select myConfig.Attribute("SuperString").Value)
.First();
XmlDocument.Attributes
возможно? (Который имеет метод GetNamedItem, который предположительно сделает то, что вы хотите, хотя я всегда просто повторил сборку атрибутов)
У меня есть Xml File books.xml
<ParameterDBConfig>
<ID Definition="1" />
</ParameterDBConfig>
Программа:
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;
}
Теперь attrVal
имеет значение ID
.
Предполагая, что ваш примерный документ находится в строковой переменной doc
> XDocument.Parse(doc).Root.Attribute("SuperNumber")
1
Если ваш XML содержит пространства имен, вы можете сделать следующее, чтобы получить значение атрибута:
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 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);
}
Я сделал это:
XmlDocument d = new XmlDocument();
d.Load("http://your.url.here");
List<string> items = new List<string>();
foreach (XmlAttribute attr in d.DocumentElement.Attributes)
{
items.Add(attr.LocalName);
}