2012-04-25 11 views
0

XMLクエリの並べ替えで見つかったほとんどの例には、名前空間は含まれていません。それらの中にはいくつかありますが、ネームスペースがあるときにクエリを実行しソートする例はありません。XMLを名前空間で並べ替える

<Search xmlns="http://whatever.whatever.com/gg/whatever"> 
<BinSet Type="Category"> 
<Bin> 
    <BinName>Clothing</BinName> 
    <BinItemCount>804</BinItemCount> 
    <BinParameter> 
    <Name>Category</Name> 
    <Value>Women's Apparel</Value> 
    </BinParameter> 
</Bin> 
<Bin> 
    <BinName>Tools</BinName> 
    <BinItemCount>126</BinItemCount> 
    <BinParameter> 
    <Name>Category</Name> 
    <Value>Tools, handtools and hardware</Value> 
    </BinParameter> 
</Bin> 
</BinSet> 
</Search> 

私はXMLを制御していないので、名前空間に対処する必要があります。また、XMLには約50件のレコードがあり、それははるかに大きなXMLファイルの一部にすぎません。私が見てきた例の

Dim nsuri as string = "http://whatever.whatever.com/gg/whatever" 
Dim xpath as string = "dd:Search/dd:BinSet[Type="Category"]/*" 
Dim nav As XPathNavigator = doc.CreateNavigator() 
Dim exp As XPathExpression = nav.Compile(xpath) 
Dim nsmgr As New XmlNamespaceManager(nav.NameTable) 
nsmgr.AddNamespace("dd", nsuri) 
exp.SetContext(nsmgr) 

exp.AddSort("BinParameter/Value", XmlSortOrder.Ascending, XmlCaseOrder.UpperFirst, "en-US", XmlDataType.Text) 

' now process in sorted order 
Dim iterator As XPathNodeIterator = nav.Select(exp) 
While iterator.MoveNext 
    Dim nav2 As XPathNavigator = iterator.Current.Clone 
    nav2.MoveToFirstChild() 
    Debug.WriteLine(nav2.Value) 
End While 

すべての私の例のXMLの例BinNameまたはBinItemCountのために、直接の子ノードをソートする方法を示しています。しかし、私はこの情報をすべて必要とし、BinParameter/Valueノードをソートする必要があります。私は考えることができるあらゆる方法を試しました...

最後に、XPathNodeIteratorまたはXPathNavigatorを使用する気にはなりません。以前私はすべてのこれらのレコードでいるXmlNodeListを返していましたし、私の呼び出しルーチンは、リンクを形成するために、ノードリストを横断します、次のように:

<a href="mypage.aspx?si=Tools">Tools, handtools and hardware (126)</a> 
<a href="mypage.aspx?si=Clothing">Women's Apparel (804)</a> 

誰もが使用して、ネストされた子ノード「値」で、このXMLをソートする方法を知っています名前空間?

また、BinName、BinItemCount、Name、Valueのすべての値にアクセスできるように、ソートされた結果をXmlNodeListやその他の.Netオブジェクトで返す最も簡単な方法を知っていますか?私はXPathNavigatorやXPathNodeIteratorに慣れていません。

ありがとうございます。

答えて

0

EDIT(すべての要素にdd:接頭辞に注意してください)

/dd:Sets/dd:Bin/dd:BinParameter 

xpath変数を設定してみてくださいと

exp.AddSort("dd:Value", XmlSortOrder.Ascending, XmlCaseOrder.UpperFirst, "en-US", XmlDataType.Text) 

次AddSortラインを使用します。

Dim iterator As XPathNodeIterator = nav.Select(exp, nsmgr) 
+0

申し訳ありません... XPath宣言は含まれていませんでした。接頭辞を含みます。それは: – rwkiii

+0

はい? (AddSort式に名前空間接頭辞が含まれていないことに注意してください) – erikxiv

+0

返信の仕方がわかりにくいです...ごめんなさい。あなたのお勧めをお試しになります。私の唯一の関心事は、私もBinNameとBinItemCountの値が必要なことです。私のXPathは/ dd:Sets/dd:Binになっています。あなたが推奨するようにXPathを深く設定することで、これらの値は含まれないように見えますか?私はそれを試し、あなたに知らせるでしょう。ありがとうございました! Btw、私のXPathは、名前空間のための適切な接頭辞を含んでいた。 – rwkiii

関連する問題