2011-12-21 89 views
1

我需要使用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> 
給出即時
+0

你說你「覺得應該工作」的代碼 - 不是嗎?如果沒有,它有什麼問題? – 2011-12-21 14:35:50

+0

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

回答

2
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

命名空間應該不包括「的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 
+0

也沒有工作。 – 2011-12-21 14:44:42

+0

該dosent工作。 subsiquent元素沒有他們的名字空間? – 2011-12-21 14:53:47

+0

子元素確實有一個名稱空間(默認名稱空間)。但我的例子確實是錯的。您還必須指定默認名稱空間的內容。我會糾正它 – 2011-12-21 14:59:19