LINQ to XML-读取XML文档

问题描述

| 有人可以帮我如何使用Linq to XML读取下面的XML文档吗?
<?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\">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\">[email protected]</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>
我尝试使用此代码,但给出的是null或对象引用未设置错误
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();
    

解决方法

        好吧,目前尚不清楚,或者您还没有解释您感兴趣的数据。但是,您当前选择的\“ OrderRequest \”元素似乎不具有您尝试访问的任何属性或子元素,因此我怀疑在做
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
                               };
更接近您想要实现的目标。我无法确定您要使用哪个“外部”元素,因此我将其省略。