2

私はこのXMLデータの解析に一日中取り組んできました。私の問題は名前空間のようです。前回のウェブサイトhttp://www.codeproject.com/Articles/30965/Read-XML-with-Namespace-resolution-using-XLinq-XElで少し希望があったと思いましたが、失敗しました。以下のコードを実行するたびに、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。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>
4

1 に答える 1

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);
于 2012-10-23T23:58:48.380 に答える