Как анализировать документы с пространствами имен XML или без них? - PullRequest
1 голос
/ 21 ноября 2011

У меня есть несколько файлов XML для анализа, некоторые из них выглядят так:

<?xml version="1.0" encoding="UTF-8"?>
<ab:rootNode xmlns:ab="http://www.uri.com">
    <ab:nodeDate>...</ab:nodeDate>
</ab:rootNode>

, а другие без пространства имен:

<?xml version="1.0" encoding="UTF-8"?>
<rootNode>
    <nodeDate>...</nodeDate>
</node>

В LINQ to XMLследует уточнить пространство имен, иначе оно не будет штрафовать ни одного узла.Как управлять пространствами имен?Проверять, существует ли xmlns:ab="http://www.uri.com" в элементе rootNode?и если он существует, я создаю XNamespace и добавляю его к элементу имени следующим образом (псевдокод):

XNamespace ab = "http://www.uri.com";
string prefixe = String.Empty;

if (XmlNamespaceExists(ab , "rootNode")
{
   prefixe = ab;
}

1 Ответ

2 голосов
/ 21 ноября 2011

Вы можете использовать:

XNamespace ns = doc.Root.Name.Namespace;
var dates = doc.Descendants(ns + "nodeDate");

Я полагаю, что это должно работать независимо от того, используются пространства имен или нет - просто заканчивается поиск каждого элемента nodeDate с тем же пространством имен, что и у корневого элемента.

...