Я начинаю использовать lxml
в Python для обработки XML/XSL-документов, и в целом это кажется очень прямым. Тем не менее, я не могу найти способ передать XML-фрагмент в качестве параметра таблицы стилей при выполнении перевода.Пропустить XML-фрагменты как параметры таблицы стилей с lxml?
Например, в PHP можно передать DOMDocument
фрагментов XML как параметры таблиц стилей, так что один может иметь сложный Params, доступный в таблице стилей:
$xml = new DOMDocument();
$xml->loadXML('<root><node/></root>');
$xsl = new DOMDocument();
$xsl->loadXML('<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes"
indent="yes" media-type="text/html" />
<xsl:param name="a" />
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="$a/foo/bar/text()" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>');
$fragment = new DOMDocument();
$fragment->loadXML('<foo><bar>baz</bar></foo>');
$proc = new XSLTProcessor;
$proc->registerPHPFunctions();
$proc->importStyleSheet($xsl);
$param_ns = '';
$param_name = 'a';
$proc->setParameter($param_ns, $param_name, $fragment->documentElement);
Который приведет:
<html>
<body>
baz
</body>
</html>
Как это сделать, используя lxml
?
Спасибо. Не могли бы вы отредактировать сообщение и изменить ссылку на страницу с помощью настраиваемого распознавателя? Я заметил пользовательские функции xpath после публикации и пришел к такому же выводу, но метод 'document()' может быть более полезным. –
Этот ответ особенный, потому что с момента, когда @Steven было так мало очков, он не мог опубликовать несколько ссылок. Сейчас у него около 12 тысяч очков. Долгий путь. – mlissner
@mlissner: спасибо, что напомнил мне ;-), я исправил ссылки. – Steven