Может ли Linq to XML работать с двоеточиями? - PullRequest
2 голосов
/ 27 мая 2011
var count = (from p in xmlDoc.Descendants("env:SE04Overprinting")
select p).Count();

выдает исключение (вид сбой при получении, но использование часов показывает эту ошибку)

xmlDoc.Descendants("env:SE04Overprinting")

'"env: SE04Overprinting" "вызвала исключениетипа 'System.Xml.XmlException' System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>

Я немного осмотрел эту ошибку, но ничего не нашел, затем попытался избавиться от двоеточия:

var count = (from p in xmlDoc.Descendants("env")
select p).Count();

это работает.Является ли извлечение двоеточий из файла единственным способом обойти это?

Ответы [ 2 ]

7 голосов
/ 27 мая 2011

Если ваш XML правильно объявляет пространство имен, вы можете сделать это:

XNamespace env = "http://namespaceinXml";
var count = (from p in xmlDoc.Descendants(env + "SE04Overprinting")...

Пример:

<foo xmlns:env="http://foo.bar">
  <env:bar>test</env:bar>
</foo>

Поскольку bar находится в пределах env Пространство имен, вы можете получить его значение следующим образом:

XDocument xdoc = XDocument.Load("test.xml");
XNamespace env = "http://foo.bar";
string bar = xdoc.Descendants(env+"bar").First().Value; //returns test

Убедитесь, что XNamespace объявление точно соответствует значению пространства имен в вашем XML.

2 голосов
/ 27 мая 2011

Вы, кажется, думаете об этом двоеточии как часть имени элемента (ов), который вы пытаетесь получить. Это не так, это разделитель между префиксом пространства имен и локальным именем.

Без объявления пространства имен, env: не имеет смысла. Вам необходимо добавить к локальному имени (в вашем случае «SE04Overprinting») фактическое пространство имен (ищите xmlns:env=, где-то выше искомых узлов).

См. Раздел: Создание XName в пространстве имен, в документации XName

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...