この長い投稿で申し訳ありません....しかし、私はこの仕事から頭痛がしています。
リストを抽出し、個別の値を使用し、変換のために Web に渡す必要がある 1 マイルの xml ドキュメントがあります。
xslt とキーを使用してタスクを完了しましたが、その努力によってサーバーはひざまずきます。
説明: xml 内の数百の製品。すべてに名前と ID が付けられた多数のカテゴリがあり、すべてのカテゴリには名前と ID を持つ少なくとも 1 つのサブカテゴリがあります。
カテゴリは 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>
望ましい結果:
<?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 年の製品からの当初の意志では、5 から 15 のサブカテゴリを持つ 10 のカテゴリが生成されます)
試したこと:
- キー付きの Xslt - 正常に動作しますが、パフォーマンスが低下します
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 ステートメントである種の魔法を適用できますか??
良いカルマのトラックは、私を正しい方向に向けることができるものに行きます..
//スティーン
ノート:
- 誰かがより良いオプションを持っている場合、私はlinq/XDocumentの使用に固執していません
- 現在 .net 3.5 を使用していますが、必要に応じて 4 に切り替えることができます