Подтвердить что ты не робот

Применение XSLT к XML файлу

Я понимаю, что, вероятно, буду сожалеть об этом до конца своей жизни, но... Есть ли способ применить XSLT к XML файлу без файла XML, имеющего явную ссылку на файл XSLT?

Лично я думал, что вся суть XSLT заключается в том, что вы можете применить несколько разных преобразований к одному и тому же необработанному XML файлу, чтобы получить от него несколько разных результатов. Но это не работает, если преобразование должно быть указано в исходном XML файле. Кажется, что для изменения преобразования вы должны изменить основной файл необработанных данных, который просто кажется неправильным...

Итак, есть ли способ создать какой-то файл, который говорит: "Возьмите этот XML и этот XSLT и визуализируйте результат в окне браузера"?

Edit:

Возможно, мой вопрос был неясным.

Если я открою Блокнот, напишу XML файл и упомянул имя XSLT файла внутри него, то при двойном щелчке по XML файлу веб-браузер применяет указанный XSLT. Есть ли способ убедить браузер сделать это без изменения исходного файла XML? Или я буду вынужден искать процессор XSLT с командной строкой?

4b9b3361

Ответ 1

Есть ли способ применить XSLT к XML файлу без XML файла с явной ссылкой на файл XSLT?

Конечно. Фактически спецификация XSLT вообще не полагается (упоминает) в файле XML, имеющем ссылку на таблицу стилей XSLT для ее обработки.

Таким образом, один и тот же файл XML может обрабатываться многими, разными преобразованиями XSLT.

В XSLT 2.0 и выше даже для преобразования XSLT не требуется применять соответствующий XML-документ.

Как это можно сделать?

Короткий ответ. Это зависит от реализации: прочитайте соответствующую документацию XSLT-процессора (например, XslCompiledTransform для .NET, Saxonica for Saxon,... и т.д.).

Кроме того, почти у каждого XSLT-процессора есть утилита командной строки для вызова преобразования из окна консоли - снова проверьте соответствующую документацию ( msxsl.exe для MSXML, nxslt.exe для XslCompiledTransform,... и т.д.)

Вот несколько строк comannd для процессоров XSLT, которые я использую:

Это вызывает процессор MSXML 3:

msxsl.exe %xml% %xsl%  -o %out% -u '3.0' -t %param[ name="value"]%

Это вызывает процессор MSXML 4:

msxsl.exe %xml% %xsl%  -o %out% -u '4.0' -t %param[ name="value"]%

Это вызывает процессор MSXML 6:

msxsl.exe %xml% %xsl%  -o %out% -u '6.0' -t %param[ name="value"]%

Это вызывает .NET XslCompiledTransform:

nxslt2.exe %xml% %xsl% -t  -o %out% %param[ name="value"]%

Это вызывает AltovaXML (XML-SPY) для XSLT 10:

 AltovaXML.exe -xslt1 %xsl% -in %xml% -out %out%%param[ name="value"]%

Это вызывает AltovaXML (XML-SPY) для XSLT 2.0:

 AltovaXML.exe -xslt2 %xsl% -in %xml% -out %out%%param[ name="value"]%

Это вызывает Saxon 9.x(для XSLT 2.0):

java.exe -Xms512M -Xmx512M  -jar C:\xml\Parsers\Saxon\Ver.9.1.0.5\J\saxon9.jar   -t  -repeat:1 -o %out%  %xml%  %xsl%  %param[ name=\"value\"]%

Это вызывает XQSharp (XSLT 2.0):

XSLT.exe -s %xml% -o %out% -r 1 -t   %xsl% %param[ name="value"]%

Во всем выше, %xml% - это путь к XML файлу, %xsl% - это путь к основному файлу XSLT, %out% - это путь к файлу, который будет содержать результат преобразования.

%param[ name="value"]% - это список спецификаций параметров name = value, и это необязательно использовать.

Ответ 2

Почему, конечно!:)

Вам просто нужно вызывать требуемый XSLT-процессор, поставляющий (как минимум) XSLT и XML файл для использования. Фактически внутренне это то, что приложения, подобные Internet Explorer, явно, когда обнаруживают, что XML-документ ссылается на файл XSLT.

Как вы это сделаете, это будет зависеть от вашей среды, например, командной строки XSLT-процессоров, и вы также можете применять XSLT в большинстве программ языки, например Применение XSLT с использованием С#.

Ответ 3

Простой метод здесь

http://www.devguru.com/content/technologies/xml_dom/16058.html

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

Этот метод обрабатывает этот node и его потомки, используя указанную таблицу стилей XSL, и возвращает полученное преобразование.

<html>
<head>
<script> 
    xmldoc = new ActiveXObject("Microsoft.XMLDOM"); 
    xmldoc.async = false; 
    xmldoc.load("xmldoc.xml"); 
    xsldoc = new ActiveXObject("Microsoft.XMLDOM"); 
    xsldoc.async = false; 
    xsldoc.load("xsldoc.XSL"); 
 </script> 

 <script> 
    document.write(xmldoc.transformNode(xsldoc)); 
 </script>
</head>
<body> 

Ответ 4

Да, это возможно. Все реализации XSL-T имеют API для выполнения преобразования XSL-T в XML файле.

Ответ 5

Ну, похоже, вы ищете какое-то готовое решение. Вместо написания кода Java или .NET для запуска XSLT в XML файле. В Java-мире есть библиотека http://en.wikipedia.org/wiki/Apache_Cocoon, которая позволяет это.

Ответ 6

Реагирование на требование редактирования OP для выбора разных XSLT из браузера.

Я не проводил никаких расследований, прежде чем отвечать, но еще раз, когда IE был единственной практичной игрой в городе, я помню, что был CSS по умолчанию, который был применен к файлам XML в браузере. Поскольку файлы CSS и XSLT указаны в документах с инструкцией по обработке, может быть какой-то путь через плагины/расширения для произвольного переопределения таблицы стилей по умолчанию браузера - если другие браузеры обрабатывают это аналогичным образом?

Или может быть способ динамически добавить инструкцию обработки в документ и обновить?

Ответ 7

Все, кто отвечает на этот вопрос (включая меня), похоже, не уверены в том, что именно вы спрашиваете. Поскольку вы еще не отметили какие-либо из ответов как правильные, я выйду на конечность и предположим, что то, что вы ищете, - это решение HTML/AJAX (асинхронный JavaScript и XML). Таким образом, вы можете указать браузеру использовать другой стиль в стиле XSLT в зависимости от определенных условий (например, браузер IE, или дата - Новый год и т.д.).

Вместо того, чтобы вставлять код здесь, я укажу вам сообщение в блоге, которое, я считаю, охватывает именно то, что вы ищете (вам нужно будет добавить условия самостоятельно): http://johanlouwers.blogspot.co.uk/2011/05/render-xml-into-div-using-ajax-and-xsl.html

Примечание. В приведенном выше примере используются два документа XML и один стиль таблицы XSLT, но их можно легко адаптировать для использования двух таблиц стилей и одного документа XML.

Примечание.. Если вы запустите пример, используйте его непосредственно в браузере, так как я обнаружил, что запуск файла test.html из среды IDE, такой как WebStrom, приводит к тому, что заметка происходит при нажатии ссылок.

Если это ответит на ваш вопрос (или находится ближе всего к его ответу), отметьте его как выбранный ответ, чтобы этот пост можно было перечислить как разрешенное.