Запрос XDocument Запрос не работает, когда элемент / корень имеет Пространство имен в качестве атрибута - PullRequest
1 голос
/ 28 июля 2011

Проблема в том, что я не могу получить никаких результатов, если узел содержит пространство имен / атрибут. Это код:

Dim xmlFromDisk = XDocument.Load("customers.xml")
Dim ukCustomers = <ukCustomers>
                    <%= From cust In xmlFromDisk...<Customer> _
                    Where cust.<Country>.Value = "UK" _
                    Select cust %>
                  </ukCustomers>

Когда у меня есть следующий customer.xml, запрос работает:

<?xml version="1.0" encoding="utf-8"?>
<Customers>
  <Customer>
    <CustomerID>ALFKI</CustomerID>
    <CompanyName>Alfreds Futterkiste</CompanyName>
    <Country>UK</Country>
  </Customer>
  </Customers>

Когда у меня есть следующий customer.xml, запрос НЕ работает:

    <?xml version="1.0" encoding="utf-8"?>
<Customers xmlns="http://tempuri.org/">
  <Customer>
    <CustomerID>ALFKI</CustomerID>
    <CompanyName>Alfreds Futterkiste</CompanyName>
    <Country>UK</Country>
  </Customer>
  </Customers>

Единственное отличие - это пространство имен xmlns = "http://tempuri.org/" в элементе Customers.

1 Ответ

1 голос
/ 28 июля 2011

Конечно, так что вам нужно указать и пространство имен. xmlns="..." указывает пространство имен по умолчанию для любых неквалифицированных дочерних элементов.

Я не знаю, как бы вы сделали это в XML-литерале в VB, но в C # вы просто написали бы:

XNamespace ns = "http://tempuri.org/";
var ukCustomers = doc.Root
                     .Elements(ns + "Customer")
                     .Where(x => (string) x.Element(ns + "Country") == "UK");

РЕДАКТИРОВАТЬ: Это эквивалентный код VB, как показано Reflector и немного взломан мной:

Dim ns As XNamespace = "http://tempuri.org/"
Dim ukCustomers =
   (From x In doc.Root.Elements(DirectCast((ns + "Customer"), XName))
    Where (CStr(x.Element(ns + "Country")) = "UK")
    Select x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...