Я хочу отсортировать следующий XML-файл таким образом, чтобы узлы таблицы под таблицами сортировались по их имени. Я также хочу, чтобы столбцы под узлом Столбцы были их узлом имени.
Как это сделать с помощью ruby и nokogiri?нужна помощь в сортировке xml-файла с помощью ruby nokogiri
Я надеюсь, что этот пример дает представление о том, как я хочу отсортированный (он не включает весь файл, слишком много набрав):
....
<Table>
<Name>Account</Name>
...
</Table>
<Table>
<Name>Item</Name>
</Table>
<Name>Order</Name>
<Table>
<Name>Product</Name>
...
<Column>
<Name>description</Name>
</Column>
<Column>
<Name>productid</Name>
</Column>
<Column>
<Name>productname</Name>
</Column>
...
</Table>
....
К сожалению, я не могу загрузить файл неупорядоченной. Поэтому я должен буду опубликовать его здесь:
<Db xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tedsdb.com/schemas" xsi:schemaLocation="http://tedsdb.com/schemas/Db.xsd">
<Name>Store</Name>
<Version>3</Version>
<Catalog name="Store" version="3"></Catalog>
<Tables>
<Table>
<Name>Product</Name>
<Columns>
<Column>
<Name>productid</Name>
<Length>11</Length>
</Column>
<Column>
<Name>productname</Name>
<Length>25</Length>
</Column>
<Column>
<Name>description</Name>
<Length>250</Length>
<Properties>
<Property>
<Name>Store_NAME</Name>
<Value>desc</Value>
</Property>
</Properties>
</Column>
</Columns>
</Table>
<Table>
<Name>Order</Name>
<Columns>
<Column>
<Name>orderid</Name>
<Length>11</Length>
</Column>
<Column>
<Name>userid</Name>
<Length>11</Length>
</Column>
<Column>
<Name>orderdate</Name>
<Properties>
<Property>
<Name>NAME_IS_KEYWORD</Name>
<Value>desc_</Value>
</Property>
<Property>
<Name>Store_NAME</Name>
<Value>desc</Value>
</Property>
</Properties>
</Column>
</Columns>
<Key>
<Name>Order_PK</Name>
<Type>PRIMARY</Type>
<ColumnNames>
<Name>topid</Name>
</ColumnNames>
</Key>
</Table>
<Table>
<Name>Item</Name>
<Columns>
<Column>
<Name>itemid</Name>
<Length>11</Length>
</Column>
<Column>
<Name>itemname</Name>
<Length>250</Length>
</Column>
</Columns>
<Key>
<Name>Product_PK</Name>
<Type>PRIMARY</Type>
<ColumnNames>
<Name>topid</Name>
</ColumnNames>
</Key>
</Table>
<Table>
<Name>Account</Name>
<Columns>
<Column>
<Name>accountid</Name>
<Length>11</Length>
</Column>
<Column>
<Name>accountname</Name>
<Length>250</Length>
</Column>
</Columns>
<Key>
<Name>Product_PK</Name>
<Type>PRIMARY</Type>
<ColumnNames>
<Name>topid</Name>
</ColumnNames>
</Key>
</Table>
</Tables>
<Links>
<Link>
<Name>Accounts.orders.link</Name>
</Link>
</Links>
</Db>
После того, как вы попробовали ответить, я попробовал следующий код. Я использую Aptana Studio на Windows 7. Переменная DOC не равно нулю и на самом деле имеет загруженный файл, но doc.at (// Таблицы) возвращает NIL, и поэтому он не оттуда:
require "rubygems"
require "nokogiri"
f = File.open("test.xml")
doc = Nokogiri::XML(f)
f.close
tables = doc.at('//Tables');
tables.search('./Table').each do |t|
columns = t.at('//Columns')
columns.search('./Column').sort_by { |l| l.at('Name').text }.each do |col|
columns << col
end
end
puts doc.to_xml
не работает:. (... вложенные коды в вопросе – Flethuseo
я заметил, есть проблемы с вашим XML Исправьте их, и он будет работать. – pguardiario
Я сделал, и мне удалось сортировать таблицы. Я заметил, что t, когда я попытался сделать это для столбцов. Я получаю только сортировку столбцов первой таблицы. Я обновил код до попытки сортировки столбцов. – Flethuseo