powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Уникальные значения через xmlstarlet
6 сообщений из 6, страница 1 из 1
Уникальные значения через xmlstarlet
    #39453881
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть большой XML, с которым я работаю через пакет xmlstarlet (использует XPath 1).
Мне нужно получить список уникальных строк, которые будут отсортированы по длине и по значению.
Командная строка:
Код: plaintext
1.
2.
3.
xmlstarlet select -T -t -m "/reg:register/content[@blockType='domain']" \
 -s A:N:- "string-length(domain)" -s A:T:- "domain" \
 -v "set:distinct(domain)" -n data.xml
Сортирует правильно, но дубли почему-то не убирает.
Если прогонять через sort -u, то дубли убираются, но первоначальная сортировка теряется.
Не посоветуете, как избавиться от дублей?
...
Рейтинг: 0 / 0
Уникальные значения через xmlstarlet
    #39453948
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал через утилиту uniq в конвейере.
С помощью XPath от дублей избавиться не удалось.
...
Рейтинг: 0 / 0
Уникальные значения через xmlstarlet
    #39454441
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите пример XML, что выбираете и, что такое дубли
...
Рейтинг: 0 / 0
Уникальные значения через xmlstarlet
    #39454463
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML выглядит примерно так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" encoding="utf-8"?>
<reg:register xmlns:reg="http://rsoc.ru" xmlns:tns="http://rsoc.ru" updateTime="2017-05-17T09:00:00+03:00" updateTimeUrgently="2017-05-16T20:47:00+03:00" formatVersion="2.2">
...
  <content id="193958" includeTime="2015-06-01T14:36:34" entryType="2" blockType="domain" hash="BCB7EBCF6134826A491012E23B51C7A8">
    <decision date="2015-05-19" number="определение о предварительном обеспечении по заявлению № 2и-0064/2015" org="Мосгорсуд"/>
    <domain><![CDATA[ex.ua]]></domain>
    <ip>93.158.209.26</ip>
  </content>
...
  <content id="311697" includeTime="2016-06-21T13:42:55" entryType="5" blockType="domain" hash="EAE836198AAEA3AEE5B905A4DF9D968F">
    <decision date="2016-04-06" number="решение суда по делу № 3-0504/2016" org="Мосгорсуд"/>
    <domain><![CDATA[ex.ua]]></domain>
    <ip>213.133.162.131</ip>
  </content>
...несколько тысяч узлов content...



В выводе есть, например, такое:
Код: plaintext
1.
2.
ex.ua
ex.ua
Они взяты из разных узлов /reg:register/content, содержимое domain совпадает, однако дубли не исключились.
...
Рейтинг: 0 / 0
Уникальные значения через xmlstarlet
    #39454474
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте так
Код: javascript
1.
/reg:register/content[@blockType='domain' and not(preceding:sibling::content[@blockType='domain' and domain = current()/domain])]
...
Рейтинг: 0 / 0
Уникальные значения через xmlstarlet
    #39454491
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет, это не эффективно, тогда лучше обрабатывать дубли в конвейере.
Мне было непонятно, почему set:distinct работает со странностями — он часть дублей убирает, часть оставляет.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Уникальные значения через xmlstarlet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]