Получение содержимого тега в LINQ to XML с использованием пространств имен - PullRequest
1 голос
/ 21 декабря 2011

Мне нужно получить содержимое тега POIssuedDate приведенного ниже XML с помощью LINQ.Ниже приведен код, который, я думаю, должен работать.

РЕДАКТИРОВАТЬ: Только что попробовал с XNamespace bat = @ "x-commerceone: document: btsox: Batch.sox $ 1.0";и XNamespace bat = @ "urn: x-commerceone: document: btsox: Batch.sox $ 1.0";оба не работают.

Код выдает исключение "Последовательность не содержит элементов", которое я ожидаю, если ничего не совпадает, учитывая, что я использую метод First ()

Код

XDocument baseXML = XDocument.Load(Path.Combine(XMLFolder + @"\Provide.xml"));
XNamespace bat = @"xmlns:bat=""urn:x-commerceone:document:btsox:Batch.sox$1.0";

string date = baseXML.Descendants(bat + "Batch").Elements("PurchaseOrder").Elements("OrderHeader").Elements("POIssuedDate").First().Value;

XML

<?soxtype urn:x-commerceone:document:btsox:Batch.sox$1.0?>
<?import urn:x-commerceone:document:telcoapisox:ServiceRequestOrder.sox$1.0?>
<?import urn:x-commerceone:document:com:commerceone:CBL:CBL.sox$1.0?>
<?import urn:x-commerceone:document:btsox:DSL.sox$1.0?>
<bat:Batch BatchID="B-15-6-2001-4" NoOfEntries="3" xmlns="urn:x-commerceone:document:com:commerceone:CBL:CBL.sox$1.0" xmlns:bat="urn:x-commerceone:document:btsox:Batch.sox$1.0" xmlns:sro="urn:x-commerceone:document:telcoapisox:ServiceRequestOrder.sox$1.0" xmlns:dsl="urn:x-commerceone:document:btsox:DSL.sox$1.0">
  <PurchaseOrder>
    <OrderHeader>
      <POIssuedDate>20010615T15:12:03</POIssuedDate>
..SNIP
    </OrderHeader>
  </PurchaseOrder>
</bat:Batch>

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011
XNamespace bat = @"urn:x-commerceone:document:btsox:Batch.sox$1.0";
XNamespace ns  = @"urn:x-commerceone:document:com:commerceone:CBL:CBL.sox$1.0";

string date = baseXML.Descendants(bat + "Batch").Elements(ns + "PurchaseOrder").Elements(ns + "OrderHeader").Elements(ns + "POIssuedDate").First().Value;
2 голосов
/ 21 декабря 2011

Пространство имен не должно содержать часть "xmlns: bat":

XNamespace bat = "urn:x-commerceone:document:btsox:Batch.sox$1.0";
XNamespace ns = "urn:x-commerceone:document:com:commerceone:CBL:CBL.sox$1.0";

Кроме того, вы должны указать пространство имен для каждого элемента:

string date = baseXML.Descendants(bat + "Batch")
                     .Elements(ns + "PurchaseOrder")
                     .Elements(ns + "OrderHeader")
                     .Elements(ns + "POIssuedDate")
                     .First().Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...