<Report xmlns="Microsoft.SystemCenter.DataWarehouse.Report.Alert" xmlns:p1="w3.org/2001/XMLSchema-instance"; Name="Microsoft.SystemCenter.DataWarehouse.Report.Alert" p1:schemaLocation="Microsoft.SystemCenter.DataWarehou?Schema=True">
<Title>Alert Report</Title>
<Created>6/27/2013 9:32 PM</Created>
<StartDate>6/1/2013 9:29 PM</StartDate>
<EndDate>6/27/2013 9:29 PM</EndDate>
<TimeZone>(UTC)</TimeZone>
<Severity>Warning, Critical</Severity>
<Priority>Low, Medium, High</Priority>
<AlertTable>
<Alerts>
<Alert>
<AlertName></AlertName>
<Priority></Priority>
</Alert>
</Alerts>
</AlertTable>
</Report>
Так что я пытаюсь вывести список узлов, которые отображаются под дочерними элементами. So/Report/AlertTable/Alerts. Я делал очень похожего раньше, но в этом формате он почему-то не работает. Может ли кто-нибудь указать мне в правильном направлении?Выбор конкретного списка узлов в XML
XmlDocument Log = new XmlDocument();
Log.Load("test.xml");
XmlNodeList myLog = Log.DocumentElement.SelectNodes("//Report/AlertTable/Alerts");
foreach (XmlNode alert in myLog)
{
Console.Write("HERE");
Console.WriteLine(alert.SelectNodes("AlertName").ToString());
Console.WriteLine(alert.SelectNodes("Priority").ToString());
Console.Read();
}
EDIT: Один из ответов был я пытаюсь использовать кучу имен с p1, но не было такой удачи.
EDIT: Не сработал:
var name = new XmlNamespaceManager(log.NameTable);
name.AddNamespace("Report", "http://www.w3.org/2001/XMLSchema-instance");
XmlNodeList xml = log.SelectNodes("//Report:Alerts", name);
Есть ли вероятность, что вы можете использовать LINQ to XML? Это все можно сделать с XmlDocument, но у вас будет лучшее время с LINQ to XML ... –
try .SelectNodes («Report/AlertTable/Alerts»); – Jonesopolis
@JonSkeet - Я не могу сказать, что я когда-либо использовал LINQ. Я сделал очень похожий скрипт на C# раньше, чем это, но я считаю, что пространство имен - это то, что его закручивает. – user99999991