1

次の XML があります。

<TRUCK Counter="0">
  <CARRIER>A PLUS EXPEDITING &amp; LOGISTICS INC.</CARRIER>
  <CARRIERPHONE>(000)000-0220</CARRIERPHONE>
  <UNITNO>100673V</UNITNO>
  <UNITTYPE>CARGO VAN                     </UNITTYPE>
  <DISTANCE>13</DISTANCE>
  <AVAILABLE>06/14/2012 09:00</AVAILABLE>
  <STATUS>In Service</STATUS>
  <LOCATION>REDFORD, MI</LOCATION>
  <NOTE> check 1st</NOTE>
  <PAYLOAD>3000</PAYLOAD>
  <DIMS>
    <BOXLENGTH>108</BOXLENGTH>
    <BOXWIDTH>53</BOXWIDTH>
    <BOXHEIGHT>48</BOXHEIGHT>
  </DIMS>
  <DOMICILE>US</DOMICILE>
  <SATELLITE>N</SATELLITE>
</TRUCK>

必要な要素を選択し、並べ替える列を渡すメソッドでそれらを並べ替えています。

public static XDocument GetSortedTrucksXml(string xmlBuffer, string sortColumn)
{
    XDocument xdoc = XDocument.Parse(xmlBuffer);

    int Counter = 0;

    var trucks = from s in xdoc.Element( "TRUCKS" ).Elements( "TRUCK" )
                 orderby ( string )s.Element( sortColumn )
                 select new XElement( "TRUCK",
                        s.Element( "CARRIER" ),
                        s.Element( "CARRIERPHONE" ),
                        s.Element( "UNITNO" ),
                        s.Element( "UNITTYPE" ),
                        s.Element( "DISTANCE" ),
                        s.Element( "AVAILABLE" ),
                        s.Element( "STATUS" ),
                        s.Element( "LOCATION" ),
                        s.Element( "NOTE" ),
                        s.Element( "PAYLOAD" ),
                        s.Element( "DIMS" ),
                        s.Element( "DOMICILE" ),
                        s.Element( "SATELLITE" ) );

    XDocument newDoc = new XDocument( new XElement( "TRUCKS" ) );

親要素を指定するだけで、の子を取得していることに注意してください。

私の質問は、BOXLENGTH、BOXWIDTH、または BOXHEIGHT でどのように並べ替えるかです。並べ替え列として「DIMS/BOXLENGTH」を送信すると、エラーが発生します。

4

1 に答える 1

1

XPath 拡張メソッドを使用できます。

// You need this namespace
using System.Xml.XPath;

// use this in your query
orderby (string)s.XPathSelectElement(sortColumn)
于 2012-06-14T14:05:16.343 に答える