Linq to XML - пространства имен - PullRequest
1 голос
/ 28 января 2010
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Book List</title>
</head>
<body>
<blist:books
xmlns:blist="http://www.wrox.com/books/xml">
<blist:book>
<blist:title>XSLT Programmers Reference</blist:title>
<blist:author>Michael Kay</blist:author>
</blist:book>
</blist:books>
</body>
</html>

из данного XML-документа, я хочу перебрать все <blist:books> элементы.

(т.е.) Как мне обработать пространство имен?

я пытался

XNamespace blist = XNamespace.Get("http://www.wrox.com/books/xml");
XElement element = XElement.Load("Books.xml");
IEnumerable<XElement> titleElement =
            from el in element.Elements(blist + "books") select el;

но перечисление (titleElement) не возвращает никакого результата.

1 Ответ

0 голосов
/ 28 января 2010

У вас здесь две разные проблемы.

  1. Вы вызываете метод Elements, который возвращает direct дочерние элементы элемента, для которого вы вызываете его. Поскольку элемент <html> не имеет прямых <blist:books> дочерних элементов, вы не получите никаких результатов.
  2. XML чувствителен к регистру. Вам нужно написать books, а не Books.

Кроме того, нет смысла писать from el in whatever select el. Если вы не добавите логику сложения (например, предложение where или orderby или нетривиальный select), вы должны просто написать whatever.

Следовательно, вам нужно заменить ваш запрос LINQ следующим:

IEnumerable<XElement> titleElement = element.Descendants(blist + "books");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...