获得在LINQ标签的内容为XML命名空间
我需要使用LINQ以下XML的POIssuedDate标签的内容。下面是我写的代码,我认为应该工作。获得在LINQ标签的内容为XML命名空间
编辑:只是试图与蝙蝠的XNamespace = @ “X-commerceone:文件: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>
给出即时
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:蝙蝠”的一部分:
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
也没有工作。 – 2011-12-21 14:44:42
该dosent工作。 subsiquent元素没有他们的名字空间? – 2011-12-21 14:53:47
子元素确实有一个名称空间(默认名称空间)。但我的例子确实是错的。您还必须指定默认名称空间的内容。我会纠正它 – 2011-12-21 14:59:19
你说你“觉得应该工作”的代码 - 不是吗?如果没有,它有什么问题? – 2011-12-21 14:35:50
XNamespace bat = @“urn:x-commerceone:document:btsox:Batch.sox $ 1.0”; http://msdn.microsoft.com/us-en/library/system.xml.linq.xnamespace.aspx – BLUEPIXY 2011-12-21 14:41:34