powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Фильтрация XML-документа
11 сообщений из 11, страница 1 из 1
Фильтрация XML-документа
    #37539017
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть довольно большой XML - документ(1-2 Мб). Задача получить из него другой XML профильтровав по параметру (например, point="0"). Cо средствами обработки XML плотно не сталкивался. Помогите найти в идеале визуальный редактор, если нет то код и среду в которой он выполняется).
...
Рейтинг: 0 / 0
Фильтрация XML-документа
    #37539175
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XSLT?
...
Рейтинг: 0 / 0
Фильтрация XML-документа
    #37543081
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_XSLT?

Спасибо за подсказку, но хочу уточнить:
1) Что есть Компилятор языка XSLT (пытался делать простенькие примеры в IE8 отрабатывали через раз, в Word 2010 - ни один пример не запустился). Как его подключить и заставить обрабатывать XML в соответствие с инструкциями XSLT? Думается пока не прощупаю пару десятков примеров - свою задачу не решу.
2) Интуитивно задача кажется не сложной, по сравнению с SQL где это решается простым запросом типа SELECT * FROM TableName WHERE Point="0". С точки зрения баз данных - это типичнейший и одновременно простейший запрос. XML-документы хранят данные определённой структуры и в моем понимании являются базой данных. Но немного погуглив (пересмотрев штук 20-25 примеров), я не нашел ответа на мой вопрос "Как выбрать данные из XML документа по определённому признаку с помощью XSLT?". Отсюда вопрос: язык XSLT и создание своего XSLT-стиля путём кодирования (программирования) единственное подходящее решение для этой задачи?
...
Рейтинг: 0 / 0
Фильтрация XML-документа
    #37543398
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CacheLot1) Что есть Компилятор языка XSLT (пытался делать простенькие примеры в IE8 отрабатывали через раз, в Word 2010 - ни один пример не запустился). Как его подключить и заставить обрабатывать XML в соответствие с инструкциями XSLT?Гуглите XSLT процессор. Можете пошуршать и на этом форуме, я когда-то выкладывал сюда свою поделку на JScript
CacheLotНо немного погуглив (пересмотрев штук 20-25 примеров), я не нашел ответа на мой вопрос "Как выбрать данные из XML документа по определённому признаку с помощью XSLT?".XSL преобразование это функция, которая на вход получает XML документ, а на выходе получается нечто (в том числе и новый XML), сформированный по указанным правилам. Ваша задача только сформулировать правила
CacheLotОтсюда вопрос: язык XSLT и создание своего XSLT-стиля путём кодирования (программирования) единственное подходящее решение для этой задачи?Конечно нет. Решений куча
1) Использовать DOM/SAX парсер
2) Рассматривать XML как обычный текстовый файл и написать свой парсер
3) Посадить секретаршу, которая в блокноте быстро поудаляет все лишнее
4) Нанять программиста
...
Рейтинг: 0 / 0
Фильтрация XML-документа
    #37548081
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Подскажите что не так делаю?
Мне нужно выбрать только те карточки, которые имеют значение атрибута answered в теге statistics равное 10.
Исходный XML
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version="1.0" encoding="utf-16"?>
<dictionary xmlns="">
 
<card>
  <word wordId="1">a lot of, lots of</word> 
  <meanings>
   <meaning transcription="lɔt">
    <statistics status="4" answered="10" /> 
    <translations>
      <word>много, масса, уйма</word> 
    </translations>
      <examples>
        <example>My son watches a lot of TV!</example> 
        <example>She's got lots of English friends.</example> 
      </examples>
    </meaning>
  </meanings>
</card>

<!-- Дальше узлы такой же структуры -->

</dictionary>

Формализовал таким образом: копируем только те карточки, которые имеют <statistics status="4" answered="10" />. Набросал код, он копирует нужные карточки, но при этом не копируются XML-теги и корневой узел.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<xsl:stylesheet version = ' 1 . 0 ' xmlns:xsl='http://www.w3.org/ 1999 /XSL/Transform'>
     <xsl:template match="/">
           <!-- Проходим в цикле по всем карточкам-->
          <xsl:for-each select="/dictionary/card"> 
                 <!-- Отбираем нужные карточки  -->
               <xsl:if test="meanings/meaning/statistics[@answered='10']">  
                     <!-- Копируем все найденные узлы в выходной XML-->   
                    <xsl:copy>
                         <xsl:apply-templates select="@*|node()"/>
                    </xsl:copy>
                    <!-- <xsl:value-of select="word"/> -->
               </xsl:if>
          </xsl:for-each>
     </xsl:template>
</xsl:stylesheet>
Это все что осилил. Help me please!
...
Рейтинг: 0 / 0
Фильтрация XML-документа
    #37548189
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CacheLot,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
     <xsl:template match="/">
           <!-- Проходим в цикле по всем карточкам-->
          <xsl:for-each select="/dictionary/card[meanings/meaning/statistics[@answered='10']]"> 
                     <!-- Копируем все найденные узлы в выходной XML-->   
                    <xsl:copy>
                         <xsl:apply-templates select="@*|node()"/>
                    </xsl:copy>
                    <!-- <xsl:value-of select="word"/> -->
          </xsl:for-each>
     </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
Фильтрация XML-документа
    #37548520
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даже так (не сразу заметил, что вы "шаблоны по умолчанию" использовать хотите)

Код: plaintext
1.
2.
3.
4.
5.
6.
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
     <xsl:template match="/">
          <xsl:for-each select="/dictionary/card[meanings/meaning/statistics[@answered='10']]"> 
                    <xsl:copy-of select="." />
          </xsl:for-each>
     </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
Фильтрация XML-документа
    #37550660
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan,

Спасибо, заработало. Тестировал в Oxygen XML Editor (Xalan и Saxon разные версии). Но триальник скоро закончиться. Можно ли этот код прикрутить к IE8 or Opera (last version)? Нашел кое какую инфу об особенностях xslt в браузере IE. Пробовал менять параметр text/xsl, и пространство имен http://www.w3.org/TR/WD-xsl но безуспешно. Нужно раз в 2-3 месяца фильтровать данный XML-файл. Подойдут в принципе любые бесплатные инструменты).
...
Рейтинг: 0 / 0
Фильтрация XML-документа
    #37551053
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CacheLotМожно ли этот код прикрутить к IE8 or Opera (last version)?
Код: plaintext
<?xml-stylesheet type="text/xsl" href="my.xsl"?>
CacheLotПодойдут в принципе любые бесплатные инструменты). 7150561
...
Рейтинг: 0 / 0
Фильтрация XML-документа
    #37552079
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot _Vasilisk_]CacheLotМожно ли этот код прикрутить к IE8 or Opera (last version)?
Код: plaintext
<?xml-stylesheet type="text/xsl" href="my.xsl"?>
В IE8 работает некорректно почему то: копирует только содержимое тегов (только текст).
В других версияx IE не проверял.. Opera вообще ругается на исходный xsl... при разных вариантах параметра type. А как запустить ваш js?
...
Рейтинг: 0 / 0
Фильтрация XML-документа
    #37552216
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CacheLot,

добавьте в <xsl:stylesheet>:
Код: plaintext
<xsl:output method="xml" />

ie8 слопает


для оперы, попробуйте это у XML и XSL:
Код: plaintext
<?xml version="1.0" encoding="utf-16"?>

замените на:
Код: plaintext
<?xml version="1.0" encoding="utf-8"?>

не могу себе представить ситуации, когда вы выйдете из диапазона utf-8, с utf-16 работать особо никто не любит.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Фильтрация XML-документа
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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