Применить XSLT к файлу XML - PullRequest
14 голосов
/ 15 февраля 2012

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

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

Так есть ли какой-нибудь способ создать какой-нибудь файл с надписью "Возьмите этот XML и этот XSLT и отобразите результат в окне браузера"?

Edit:

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

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

Ответы [ 7 ]

17 голосов
/ 15 февраля 2012

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

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

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

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

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

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

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

Вот несколько строк команд для 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, и его использование не обязательно.

1 голос
/ 29 апреля 2017

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

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

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

Этот метод обрабатывает этот узел и его потомков, используя указанную таблицу стилей 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> 

1 голос
/ 15 февраля 2012

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

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

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

0 голосов
/ 03 апреля 2015

Все, кто отвечает на этот вопрос (включая меня), похоже, не уверены в том, что именно вы спрашиваете. Поскольку вы еще не отметили ни одного из ответов как правильные, я остановлюсь на вопросе и предположу, что вам может понадобиться решение 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, приводит к тому, что при щелчке по ссылкам это происходит.

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

0 голосов
/ 03 марта 2012

Отвечая на требование редактирования OP, чтобы выбрать различные XSLT из браузера.

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

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

0 голосов
/ 15 февраля 2012

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

0 голосов
/ 15 февраля 2012

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

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