2012-10-17 81 views
0

我有我想要的特定節點按字母順序排序的XML文檔。排序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 
+0

您使用的任何版本或.Net> = 3.5? –

+0

傑普,使用ASP.NET 4.0 – Flo

+0

看到我答..這將對於.NET> = 3.5 –

回答

0

由於所有的答案似乎與LINQ的工作,我只是想用正VB.NET我現在加入Arraylist中的每個節點並使用其上的常規Array.Sort()。 是否有竅門。

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代表語言集成查詢..,是一個極大的方便,統一您目前使用的東西..你可以閱讀更多here

+0

現在我們進入一個小組討論。我使用VB.NET,如何在那裏使用你的代碼?另外,爲什麼我要使用Linq而不僅僅是VB.NET? – Flo

+0

做設計用於處理XML的高級語言這種處理(如XSLT或LINQ)總是會比低級別的程序代碼編寫更容易 - 一旦你學會了使用工具,當然。 –

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(); 
     } 
+0

你的代碼中的哪個地方正在進行實際的排序? 你可以使用我自己的代碼作爲答案的基礎嗎? – Flo

+0

的同時可以用戶排序列表,這將是隻有兩個在你的代碼的代碼 – Ozgur

+0

行的路徑是錯誤的我猜最後int是不是有 – Ozgur

相關問題