Parsin - сортировка многомерного массива или списка объектов по значению или свойству в ASP Classic - PullRequest
0 голосов
/ 07 января 2011

Я анализирую и отображаю RSS-канал в ASP Classic и хочу отсортировать элементы по определенному узлу в алфавитном порядке.

Set xmlDOM = Server.CreateObject("MSXML2.DOMDocument")
xmlDOM.async = False

xmlDOM.setProperty "ServerHTTPRequest", True
xmlDOM.Load("http://myfeedhere.xml")

Set itemList = xmlDOM.getElementsByTagName("item")

''# Then I am getting the values of each node this way:

For Each item in itemList
    For Each child in item.childNodes
        Select case lcase(child.nodeName)
            case "title"
                title = child.text

            case "link"
                link = child.text

            case "fname"
                fname = child.text

            case "lname"
               lname = child.text

            case "media:content"
                media = child.getAttribute("url")
        End Select
    next

Мне нужно отсортировать itemListс помощью узла lname, что является лучшим способом сделать это ..

Добавление заголовка и ссылки на объект словаря сработало для меня, когда мне понадобились только два узла. Я вызвал быструю сортировку в массиве ключей изатем выводится соответствующим образом. Далее я должен быть готов к дублированию фамилий, что означает, что фамилия не может быть ключом.

1 Ответ

0 голосов
/ 08 января 2011

С помощью и большое спасибо http://www.4guysfromrolla.com/webtech/012799-3.shtml за двумерную функцию быстрой сортировки, я разработал решение (помимо того, что сказал клиенту обновить до .net и C #)

...

dim xmlDOM,itemList,currentLetter
Set xmlDOM = Server.CreateObject("MSXML2.DOMDocument")  
xmlDOM.async = False  

xmlDOM.setProperty "ServerHTTPRequest", True  
xmlDOM.Load("http://yourrssfeedhere.xml")


    Set itemList = xmlDOM.getElementsByTagName("item")

    dim itemListLength 
    itemListLength = itemList.length

    dim lastIndex
     lastIndex = itemListLength -1 
   'get the value of the last index of all the items

    dim byLastName()

    redim byLastName(lastIndex,3)

  ' set two-dimensinal array indexes, ([lastIndexofItemlist],[#of fields])


    dim it

    For Each item in itemList
    itemCount = itemCount + 1




    For Each child in item.childNodes


    Select case lcase(child.nodeName)

' loop through each node of item and set variable, set each case for your specific nodes in each <item>
' (i.e <category>,<lname>,etc)

     case "title"
       title = child.text

     case "description"
       description = child.text

     case "link"
       link = child.text

     case "pubdate"
       pubdate = child.text


     case "fname"
       fname = child.text

     case "lname"
      lname = child.text

      case "media:content"
      media = child.getAttribute("url")


     End Select



     next

     i = itemCount-1 



     byLastName(i,0) = title
     byLastName(i,1) = link
     byLastName(i,2) = lname
     byLastName(i,3) = fname


    next



    dim namesLength
    namesLength = Ubound(byLastName) 

 'last index of bylastname

for n = 0 to namesLength
' simple output before sort
Response.Write("<p> Last Name :" & byLastName(n,2) & ", First Name :" & byLastName(n,3) &"</p>")
next

Response.Write("<p> Sorted:</p>")



 Call QuickSort(byLastName,0,ubound(byLastName,1),2) 

'the last parameter is the field to sort the array on ,
' in this case 2 = lname
    for n = 0 to namesLength
    ' output to test sort
    Response.Write("<p> Last Name :" & byLastName(n,2) & ", First Name :" & byLastName(n,3) &"</p>")

    next
...