2012-10-23 169 views
2

我一直在努力整天解析這個XML數據。這似乎是我的問題是命名空間。我想我的最後一個網站http://www.codeproject.com/Articles/30965/Read-XML-with-Namespace-resolution-using-XLinq-XEl有一絲希望,但它也失敗了。每次我運行下面的代碼時,都會得到「對象引用未設置爲對象的實例」。用C#解析XML的方法似乎有很多,但這些命名空間正在讓我失望。我究竟做錯了什麼?用命名空間C解析XML#

請記住我是XML和C#的新手,並且用於解析JSON數據。是的,我用谷歌搜索的方法來解析XML數據,在這種情況下沒有什麼用處。我可以在沒有命名空間的情況下獲得XML,但與它們一直存在該錯誤。

C#代碼:

XElement element = XElement.Parse(xml); 

XNamespace ns2 = "http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd"; 
string val = element.Element(ns2 + "ItemDimensions").Element(ns2 + "Heigth").Value; 
           Console.WriteLine(val); 

XML數據:

<ns2:ItemAttributes xml:lang="en-US" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd"> 
    <ns2:Author>Troelsen, Andrew</ns2:Author> 
    <ns2:Binding>Paperback</ns2:Binding> 
    <ns2:Brand>Apress</ns2:Brand> 
    <ns2:Edition>5</ns2:Edition> 
    <ns2:ItemDimensions> 
    <ns2:Height Units="inches">9.21</ns2:Height> 
    <ns2:Length Units="inches">7.48</ns2:Length> 
    <ns2:Width Units="inches">2.52</ns2:Width> 
    <ns2:Weight Units="pounds">5.80</ns2:Weight> 
    </ns2:ItemDimensions> 
    <ns2:IsAutographed>false</ns2:IsAutographed> 
    <ns2:IsEligibleForTradeIn>true</ns2:IsEligibleForTradeIn> 
    <ns2:IsMemorabilia>false</ns2:IsMemorabilia> 
    <ns2:Label>Apress</ns2:Label> 
    <ns2:Languages> 
    <ns2:Language> 
     <ns2:Name>english</ns2:Name> 
     <ns2:Type>Unknown</ns2:Type> 
    </ns2:Language> 
    <ns2:Language> 
     <ns2:Name>english</ns2:Name> 
     <ns2:Type>Original Language</ns2:Type> 
    </ns2:Language> 
    <ns2:Language> 
     <ns2:Name>english</ns2:Name> 
     <ns2:Type>Published</ns2:Type> 
    </ns2:Language> 
    </ns2:Languages> 
    <ns2:ListPrice> 
    <ns2:Amount>59.99</ns2:Amount> 
    <ns2:CurrencyCode>USD</ns2:CurrencyCode> 
    </ns2:ListPrice> 
    <ns2:Manufacturer>Apress</ns2:Manufacturer> 
    <ns2:NumberOfItems>1</ns2:NumberOfItems> 
    <ns2:NumberOfPages>1752</ns2:NumberOfPages> 
    <ns2:PackageDimensions> 
    <ns2:Height Units="inches">2.60</ns2:Height> 
    <ns2:Length Units="inches">9.20</ns2:Length> 
    <ns2:Width Units="inches">7.50</ns2:Width> 
    <ns2:Weight Units="pounds">5.80</ns2:Weight> 
    </ns2:PackageDimensions> 
    <ns2:PartNumber>9781430225492</ns2:PartNumber> 
    <ns2:ProductGroup>Book</ns2:ProductGroup> 
    <ns2:ProductTypeName>ABIS_BOOK</ns2:ProductTypeName> 
    <ns2:PublicationDate>2010-05-14</ns2:PublicationDate> 
    <ns2:Publisher>Apress</ns2:Publisher> 
    <ns2:SmallImage> 
    <ns2:URL>http://ecx.images-amazon.com/images/I/51h9Sju5NKL._SL75_.jpg</ns2:URL> 
    <ns2:Height Units="pixels">75</ns2:Height> 
    <ns2:Width Units="pixels">61</ns2:Width> 
    </ns2:SmallImage> 
    <ns2:Studio>Apress</ns2:Studio> 
    <ns2:Title>Pro C# 2010 and the .NET 4 Platform</ns2:Title> 
</ns2:ItemAttributes> 

回答

2

首先:元素名稱爲Height和不Heigth

您可以使用此代碼來獲取Height值:

var doc = XDocument.Load(path); 

XNamespace ns2 = "http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd"; 


string val = doc.Document.Descendants(ns2 + "ItemDimensions") 
    .FirstOrDefault().Element(ns2 + "Height").Value; 

Console.WriteLine(val); 
+0

謝謝這幫助了很多。其實我無法相信我拼寫錯了。這是一個漫長的一天,我在最後的能量爆發。 –

+0

@BrandonWilson,不客氣! –