Ed, вот пример использования пространств имен с классом System.Xml.XPath Extensions.Я изменил его так, чтобы он соответствовал вводу, который вы просматриваете:
string markup = @"
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ...>
<Deployment.Parts>
<AssemblyPart x:Name="xamlName" Source="assembly" />
</Deployment.Parts>
</Deployment>
";
XmlReader reader = XmlReader.Create(new StringReader(markup));
XElement root = XElement.Load(reader);
XmlNameTable nameTable = reader.NameTable;
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(nameTable);
nsm.AddNamespace("x", "http://schemas.microsoft.com/winfx/2006/xaml");
nsm.AddNamespace("dep", "http://schemas.microsoft.com/client/2007/deployment");
IEnumerable<XElement> elements =
root.XPathSelectElements("//dep:Deployment/dep:Deployment.Parts/dep:AssemblyPart/@x:Name", nsm);
foreach (XElement el in elements)
Console.WriteLine(el);
Не очень сложно.Очевидно, вы уже знаете о XmlNamespaceManager, но я думаю, что у вас сложилось худшее впечатление, чем оно того заслуживает.
Когда вы говорите «безнадежно хрупкий код, который не может допустить ни малейшего изменения во входном файле», выобвинять пространства имен вообще или XmlNamespaceManager?Я не понимаю, как один из них делает его хрупким ... тем более, что код обработки XML без пространств имен не допустит некоторые изменения во входном документе, но допустит другие.
Имейте немного уважения к другим умным людям в отрасли, потратьте немного времени, чтобы понять преимущества дизайна, прежде чем отклонить его, и вы обычно обнаружите, что есть веские причины для того, что было сделано.
Нечто пространства имен XML не могут быть улучшены.Однако никому не удалось выработать лучший стандарт и принять его сообществом.