對不起,這篇很長的文章....但我從這個任務頭痛。Xml簡化/提取不同的值 - 可能的LINQ
我有一英里長的XML文檔,我需要提取一個列表,使用不同的值,並通過轉換爲網頁。
我已經完成了使用xslt和keys的任務,但是這個努力迫使服務器跪下。
描述: 數以百計的產品在xml中,所有產品都帶有大量的命名和id'ed分類,所有類別至少有一個子分類與名稱和id。
的類別與ID唯一,所有的子類別內的類別中唯一:
簡化的例子形成巨大的文件(離開我們的噸的信息與任務無關):
<?xml version="1.0" encoding="utf-8"?>
<root>
<productlist>
<product id="1">
<name>Some Product</name>
<categorylist>
<category id="1">
<name>cat1</name>
<subcategories>
<subcat id="1">
<name>subcat1</name>
</subcat>
<subcat id="2">
<name>subcat1</name>
</subcat>
</subcategories>
</category>
<category id="2">
<name>cat1</name>
<subcategories>
<subcat id="1">
<name>subcat1</name>
</subcat>
</subcategories>
</category>
<category id="3">
<name>cat1</name>
<subcategories>
<subcat id="1">
<name>subcat1</name>
</subcat>
</subcategories>
</category>
</categorylist>
</product>
<product id="2">
<name>Some Product</name>
<categorylist>
<category id="1">
<name>cat1</name>
<subcategories>
<subcat id="2">
<name>subcat2</name>
</subcat>
<subcat id="4">
<name>subcat4</name>
</subcat>
</subcategories>
</category>
<category id="2">
<name>cat2</name>
<subcategories>
<subcat id="1">
<name>subcat1</name>
</subcat>
</subcategories>
</category>
<category id="3">
<name>cat3</name>
<subcategories>
<subcat id="1">
<name>subcat1</name>
</subcat>
</subcategories>
</category>
</categorylist>
</product>
</productlist>
</root>
DESIRED結果:
<?xml version="1.0" encoding="utf-8"?>
<root>
<maincat id="1">
<name>cat1</name>
<subcat id="1"><name>subcat1</name></subcat>
<subcat id="2"><name>subcat2</name></subcat>
<subcat id="3"><name>subcat3</name></subcat>
</maincat>
<maincat id="2">
<name>cat2</name>
<subcat id="1"><name>differentsubcat1</name></subcat>
<subcat id="2"><name>differentsubcat2</name></subcat>
<subcat id="3"><name>differentsubcat3</name></subcat>
</maincat>
<maincat id="2">
<name>cat2</name>
<subcat id="1"><name>differentsubcat1</name></subcat>
<subcat id="2"><name>differentsubcat2</name></subcat>
<subcat id="3"><name>differentsubcat3</name></subcat>
</maincat>
</root>
從2000產品產生10個類別,有從5到15秒(原來的意願ubcategories)試圖
事情:
- XSLT的鑰匙 - 工作正常,但pooooor性能
使用LINQ各地玩過:
IEnumerable<XElement> mainCats = from Category1 in doc.Descendants("product").Descendants("category") select Category1; var cDoc = new XDocument(new XDeclaration("1.0", "utf-8", null), new XElement("root")); cDoc.Root.Add(mainCats); cachedCategoryDoc = cDoc.ToString();
結果是一個 「只有類別」(不不同的分類值或子分類)
對此應用了相同的xlst,並獲得了相當好的性能.....但仍然遠不能使用...
我可以在linq語句中應用某種魔術來獲得所需的輸出嗎?
好人緣的卡車出去,可以指向我DET正確的方向的人..
//斯蒂恩
注:
- 我不是停留在使用LINQ/XDocument如果有人有更好的選擇
- 目前在.net 3.5上,如果需要可以切換到4
感謝您的主管回覆!上週假期前我沒有時間去嘗試...... – Steen
事實證明,我們的開發服務器正在處理50多個站點,因此部分影響了已經實施的基於xslt的解決方案的處理。數據提供商給了我選擇在他們的服務器上進行處理和緩存......以便解決所有問題,並將性能負載從網絡服務器轉移... 但是,非常感謝回覆,upvotes所有 - 我可能會有機會嘗試其他項目上的一些:-) – Steen