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に慣れていません。
ありがとうございます。
申し訳ありません... XPath宣言は含まれていませんでした。接頭辞を含みます。それは: – rwkiii
はい? (AddSort式に名前空間接頭辞が含まれていないことに注意してください) – erikxiv
返信の仕方がわかりにくいです...ごめんなさい。あなたのお勧めをお試しになります。私の唯一の関心事は、私もBinNameとBinItemCountの値が必要なことです。私のXPathは/ dd:Sets/dd:Binになっています。あなたが推奨するようにXPathを深く設定することで、これらの値は含まれないように見えますか?私はそれを試し、あなたに知らせるでしょう。ありがとうございました! Btw、私のXPathは、名前空間のための適切な接頭辞を含んでいた。 – rwkiii