Xml, XSL Javascript сортировка - PullRequest
3 голосов
/ 12 мая 2009

Я ищу способ сортировки моих XML-данных с помощью JavaScript и хочу со временем отфильтровать данные. Я знаю, что все это возможно в файле xsl, но я хотел бы сделать это на стороне клиента.

Я искал несколько мест для сортировки с помощью javascript, но большая часть была либо слишком специфичной для файла xml, либо я не мог понять, что происходит.

Буду очень признателен за любой совет

Ответы [ 6 ]

4 голосов
/ 29 мая 2009

Первая часть этого выполняет преобразование в JavaScript:

function transformXML(_xml, _xsl) {
  var
    xml = typeof _xml == 'string' 
      ? new DOMParser().parseFromString(_xml, 'text/xml') 
      : _xml // assume this is a node already
    ,xsl = typeof _xsl == 'string'
      ? new DOMParser().parseFromString(_xsl, 'text/xml')
      : _xsl // assume this is a node already
    ,processor = new XSLTProcessor()
  ;

  processor.importStylesheet(xsl);

  return processor.transformToDocument(xml.firstChild);
}

Эта функция принимает два параметра. Первый - это XML, который вы хотите преобразовать. Второй - это xslt, который вы хотите использовать для преобразования xml. Оба параметра принимают либо строки, которые будут преобразованы в узлы, либо сами узлы (например, XHR.responseXML).

Вторая часть головоломки - сортировка, в которой вы будете использовать встроенный в xsl xsl:sort.

<xsl:sort
  select="expression"
  lang="language-code"
  data-type="text|number|qname"
  order="ascending|descending"
  case-order="upper-first|lower-first"/>

Все параметры являются необязательными, кроме оператора select.

Пример использования сортировки:

<xsl:for-each select="catalog/cd">
  <xsl:sort select="artist"/>

  <xsl:value-of select="artist"/>
  <xsl:text> - </xsl:text>
  <xsl:value-of select="title"/>
</xsl:for-each>

Вы можете найти больше информации о xsl:sort в w3schools .

2 голосов
/ 03 июня 2009

Я бы не стал сортировать в листе xsl. Я использую tableorter плагин до jquery .

Раздел Getting Started очень прост (воспроизводится ниже).

Чтобы использовать плагин TableSorter, включите библиотеку jQuery и плагин TableSorter в тег вашего HTML-документа:

<script type="text/javascript" src="/path/to/jquery-latest.js"></script> 
<script type="text/javascript" src="/path/to/jquery.tablesorter.js"></script> 

TableSorter работает со стандартными таблицами HTML. Вы должны включить теги THEAD и TBODY:

<table id="myTable"> 
<thead> 
<tr> 
    <th>Last Name</th> 
    <th>First Name</th> 
    <th>Email</th> 
    <th>Due</th> 
    <th>Web Site</th> 
</tr> 
</thead> 
<tbody> 
<tr> 
    <td>Smith</td> 
    <td>John</td> 
    <td>jsmith@gmail.com</td> 
    <td>$50.00</td> 
    <td>http://www.jsmith.com</td> 
</tr> 
<tr> 
    <td>Bach</td> 
    <td>Frank</td> 
    <td>fbach@yahoo.com</td> 
    <td>$50.00</td> 
    <td>http://www.frank.com</td> 
</tr> 
<tr> 
    <td>Doe</td> 
    <td>Jason</td> 
    <td>jdoe@hotmail.com</td> 
    <td>$100.00</td> 
    <td>http://www.jdoe.com</td> 
</tr> 
<tr> 
    <td>Conway</td> 
    <td>Tim</td> 
    <td>tconway@earthlink.net</td> 
    <td>$50.00</td> 
    <td>http://www.timconway.com</td> 
</tr> 
</tbody> 
</table> 

Начните с того, что расскажите tableorter о сортировке таблицы при загрузке документа:

$(document).ready(function() 
    { 
        $("#myTable").tablesorter(); 
    } 
); 

Нажмите на заголовки, и вы увидите, что ваш стол теперь можно сортировать! Вы также можете передать параметры конфигурации при инициализации таблицы. Это заставляет TableSort сортировать первый и второй столбцы в порядке возрастания.

$(document).ready(function() 
    { 
        $("#myTable").tablesorter( {sortList: [[0,0], [1,0]]} ); 
    } 
);
0 голосов
/ 29 мая 2009

Ну, почему бы вам не использовать библиотеку прототипов? Имеет http://prototypejs.org/api/enumerable/sortBy Имеет http://prototypejs.org/api/enumerable/grep Так почему бы вам просто не отсортировать свои элементы и не найти их? Если вы хотите, чтобы на стороне клиента в JavaScript?

0 голосов
/ 12 мая 2009

XSLT поддерживается во всех основных выпусках браузера FYI ^ _ ^ (IE 6+, FF 1+, SF 2+, CHROME, OPERA 9+)

не уверен, что вы делаете, но XSLT также можно использовать в ajax

0 голосов
/ 12 мая 2009

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

Вы можете найти некоторую помощь здесь, если вам нужно отсортировать xml в javascript. http://www.velocityreviews.com/forums/t170211-clientside-filtering-and-sorting-xml-with-javascript-work-in-iebut-not-firefox.html

0 голосов
/ 12 мая 2009

Очень хороший подход - иметь XSL с проверкой параметров внутри него для сортировки и затем применить к нему несколько js, полностью рабочий пример доступен по адресу:

http://www.google.com.br/search?hl=pt-BR&q=xml+javascript+data+sort&meta=

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...