次の XML があります。
<TRUCK Counter="0">
<CARRIER>A PLUS EXPEDITING & 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」を送信すると、エラーが発生します。