开发者

LINQ to XML - Reading XML Document

开发者 https://www.devze.com 2023-03-08 21:21 出处:网络
Could someone please help me how to read the XML Document below using Linq to XML please? <?xml version=\'1.0\' encoding=\'UTF-8\' ?>

Could someone please help me how to read the XML Document below using Linq to XML please?

<?xml version='1.0' encoding='UTF-8' ?>
<cXML>
<Request>
<OrderRequest>
  <OrderRequestHeader orderID="xy1234" orderDate="2007-01-1T15:5400+10:00" type="new" orderVersion="001">
    <Total>
      <Money currency="NZ">34.06</Money>
    </Total>
    <ShipTo>
      <Address>
        <Name xml:lang="en开发者_如何学JAVA">xyz</Name>
        <PostalAddress name="xyz">
          <Street>xyz street</Street>
          <City>xyz</City>              
        </PostalAddress>
      </Address>
    </ShipTo>
    <BillTo>
      <Address>
        <Name xml:lang="en">XYZ</Name>
        <PostalAddress name="XYZ">
          <Street>PO BOX 1234</Street>
          <City>xyz</City>
          <State>xyz state</State>              
        </PostalAddress>
      </Address>
    </BillTo>
    <Contact role="xxx" addressID="123456789">
      <Name xml:lang="en">XYZ</Name>
      <Email name="business">XYZ@ms.com.nz</Email>
      <Phone>
        <TelephoneNumber>
          <Number>1234-1234</Number>
        </TelephoneNumber>
      </Phone>
    </Contact>
    <Contact role="ShipTo">
      <Name xml:lang="en">XYZ</Name>
    </Contact>
    <Contact role="Supplier">
      <Name xml:lang="en">XYZ pty ltd</Name>
    </Contact>
  </OrderRequestHeader>
  <ItemOut quantity="20" lineNumber="1" requestedDeliveryDate="2007-01-01T00:0000+10:00">
    <ItemID>
      <SupplierPartID>12345678</SupplierPartID>
    </ItemID>
    <ItemDetail>
      <UnitPrice>
        <Money currency="NZ">32</Money>
      </UnitPrice>
      <Description xml:lang="en">abc description</Description>
      <UnitOfMeasure>CU</UnitOfMeasure>
      <Classification domain="N/A"/>
      <ManufacturerPartID>12345678</ManufacturerPartID>
      <Extrinsic name="StockCode">12345</Extrinsic>
      <Extrinsic name="Quantity">1</Extrinsic>          
    </ItemDetail>
  </ItemOut>
  <ItemOut quantity="10" lineNumber="2" requestedDeliveryDate="2007-01-01T00:0000+10:00">
    <ItemID>
      <SupplierPartID>12345678</SupplierPartID>
    </ItemID>
    <ItemDetail>
      <UnitPrice>
        <Money currency="NZ">32</Money>
      </UnitPrice>
      <Description xml:lang="en">abc description</Description>
      <UnitOfMeasure>CU</UnitOfMeasure>
      <Classification domain="N/A"/>
      <ManufacturerPartID>12345678</ManufacturerPartID>
      <Extrinsic name="StockCode">23333</Extrinsic>
      <Extrinsic name="Quantity">1</Extrinsic>
    </ItemDetail>
  </ItemOut>
</OrderRequest>

I tried with this code, but it's giving either null or object reference not set error:

XDocument xdoc = XDocument.Load(@"C:\PO.xml");
 var itemOut = (from c in xdoc.Descendants("OrderRequest")

                               select new
                               {
                                   SupplierID = c.Element("Money").Value                               ,
                                   Currency = c.Attribute("currency").Value,
                                   Money = c.Element("Money").Value,
                                   Description = c.Element("Description").Value,
                                   ManufacturerPartID = c.Element("ManufacturerPartID").Value,
                                   Extrinsic = c.Attribute("name").Value
                               });

                foreach (var element in itemOut)
                {
                    Console.WriteLine(element.SupplierID);
                }

                Console.ReadLine();


Well it is not clear or rather you have not explained which data you are interested in. However the "OrderRequest" element you currently select does not seem the one having any of the attributes or child elements you are trying to access so I suspect doing

var itemOut = from c in xdoc.Descendants("ItemOut")

                               select new
                               {
                                   SupplierID = c.Element("ItemID").Element("SupplierPartID").Value                               ,
                                   Currency = c.Element("ItemDetail").Element("UnitPrice").Element("Money").Attribute("currency").Value,
                                   Money = (double)c.Element("ItemDetail").Element("UnitPrice").Element("Money"),
                                   Description = c.Element("ItemDetail").Element("Description").Value,
                                   ManufacturerPartID = c.Element("ItemDetail").Element("ManufacturerPartID").Value
                               };

is closer to what you want to achieve. I couldn't figure which "Extrinsic" element you want so I left that out.

0

精彩评论

暂无评论...
验证码 换一张
取 消