0

特定のノードをアルファベット順に並べ替えたい XML ドキュメントがあります。

XML ドキュメント

<response>
    <lst name="facet_counts">
        <lst name="facet_fields">
            <lst name="professions_raw_nl">
                <int name="Pharmacy">2724</int>
                <int name="Physiotherapy">2474</int>
                <int name="Doctor">2246</int>
                <int name="Dentist">1309</int>
            </lst>  
        </lst>
    </lst>
</response> 

希望アウトプット
歯科医(1309)
医師(2246)
薬学(2724)
理学療法(2474)

現在の ASP.NET コード

dim node as XmlNode = objXML.SelectSingleNode("response/lst[@name=""facet_counts""]/lst[@name=""facet_fields""]/lst[@name=""professions_raw_nl""]")
Dim sbuilder As New StringBuilder
Dim navigator As XPathNavigator = node.CreateNavigator()
Dim selectExpression As XPathExpression = navigator.Compile("???") <-- what expression should I use here ???
selectExpression.AddSort("????", XmlSortOrder.Ascending, XmlCaseOrder.None, "", XmlDataType.Text) <-- what expression should I use here ????
Dim nodeIterator As XPathNodeIterator = navigator.Select(selectExpression)
While nodeIterator.MoveNext()
    'how can I print the name and value of the node?
End While
4

3 に答える 3

0

次のコードを試してみましたが、動作しています(C#)。以下のように値を取得できます

        var doc = new XmlDocument();
        doc.Load("c:\\users\\ozgur\\sample.xml");
        var nav = doc.CreateNavigator();
        var node = nav.SelectSingleNode("response").SelectSingleNode("lst[@name=\"facet_counts\"]").SelectSingleNode("lst[@name=\"facet_fields\"]").SelectSingleNode("lst[@name=\"professions_raw_nl\"]").Select("int");

        var sorted = new SortedDictionary<string, string>();
        while (node.MoveNext())
        {
            var name = node.Current.SelectSingleNode("@name").Value;
            var value = node.Current.Value;
            sorted.Add(name, value);
        }

        foreach (var item in sorted)
        {
            item.Key.ToString();
            item.Value.ToString();
        }
于 2012-10-17T21:41:37.917 に答える
0

すべての回答はLinqで機能するようで、通常のVB.NETを使用したかっただけなので、各ノードをArraylistに追加し、通常のArray.Sort()を使用しました。トリックを行います。

于 2012-10-23T11:29:38.727 に答える
0

.Net>=3.5 を使用している場合は、linq を使用してこれを行うことができます。

var xmlString = "YOUR XML STRING";
var doc = XDocument.Parse(xmlString);

var list = doc. Descendants("int").select(n=>new {Name = n.Attribute("name").Value, Value = n.Value});
var sortedList = list.OrderBy(l=>l.Name);

編集はVBのプロではありませんが、これを試してください-ここに構文エラーがある可能性があります

dim xmlString as string
xmlString = "YOUR XML STRING"
dim doc as XDocument()
doc = XDocument.Parse(xmlString)
dim list = doc.Descendants("int").select(n=>new {Name = n.Attribute("name").Value, Value = n.Value}).OrderBy(l=>l.Name)

LINQ は Language Integrated Query の略で、現在使用しているよりもはるかに簡単で統一されています。詳細については、こちらを参照してください。

于 2012-10-17T21:31:48.760 に答える