[英]Complex sorting of XML using Linq
我試圖為我的問題找到解決方案,但我在這方面的知識(Linq,XML)相當有限。 :('我發現了一個類似的結構 ,但我需要一個更復雜的排序方式。
考慮以下XML文檔:
<Envelope>
<Body>
<Table>
<Trans>
<B>1</B>
<A>3</A>
<C>5</C>
</Trans>
<Trans>
<D>1</D>
<A>6</A>
<C>3</C>
</Trans>
<Trans>
<A>1</A>
<C>3</C>
<B>5</B>
</Trans>
</Table>
</Body>
<Envelope>
有什么方法可以使用C#/ Linq對<Trans>中的元素進行排序,還是我必須拆分所有<Trans>元素並逐個排序?
更新我有一個文件,這是我要完成的。 ;)
<Envelope>
<Body>
<Table>
<Trans>
<A>3</A>
<B>1</B>
<C>5</C>
</Trans>
<Trans>
<A>6</A>
<C>3</C>
<D>1</D>
</Trans>
<Trans>
<A>1</A>
<B>5</B>
<C>3</C>
</Trans>
</Table>
</Body>
<Envelope>
這實際上取決於你想要做什么(按順序處理它們,或重新排序XML?)以及你究竟是什么意思“排序”(按標簽名稱排序?按值排序?)。
如果您只是想按順序處理它們,這就是如何按值( <A>6</A>
<D>1</D>
在<A>6</A>
之前)對每個<Trans>
內的所有元素進行排序:
XDocument doc = /* load up your XML */
var sorted = from trans in doc.Descendants("Trans")
select trans.Children().OrderBy(c => int.Parse(c.Value)).ToArray();
或者,這里是如何按標簽名稱( <A>6</A>
<D>1</D>
之前的<A>6</A>
訂購:
var sorted = from trans in doc.Descendants("Trans")
select trans.Children().OrderBy(c => c.Name.LocalName).ToArray();
有了上面的內容, sorted
將是一個可枚舉的數組集合。 集合中的每個數組代表一個<Trans>
,每個這樣的數組按順序保存<Trans>
的子<Trans>
。
XDocument xDoc = XDocument.Load(....);
foreach(var trans in xDoc.Descendants("Trans"))
{
trans.ReplaceAll( trans.Elements().OrderBy(x=>x.Name.LocalName));
}
string newXml = xDoc.ToString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.