将LINQ中标记的内容转换为具有名称空间的XML

本文关键字:有名称 XML 空间 转换 LINQ | 更新日期: 2023-09-27 18:18:25

我需要使用LINQ获取下面XML的POIssuedDate标签的内容。下面是我写的代码,我认为应该可以工作。

编辑:刚刚尝试了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>

将LINQ中标记的内容转换为具有名称空间的XML

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;

命名空间不应该包含"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
相关文章: