Я не могу создать набор узлов XSL из строки. Я могу создать набор узлов из фрагмента дерева результатов. Эта таблица стилей показывает обе попытки.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="rtf">
<root>
<child>
</child>
</root>
</xsl:variable>
<xsl:variable name="rtfNs" select="exsl:node-set($rtf)" />
<xsl:variable name="str" select="'<root><child></child></root>'" />
<xsl:variable name="strNs" select="exsl:node-set($str)" />
<xsl:template match="/">
<xsl:copy-of select="$rtfNs" />
<xsl:copy-of select="$rtfNs/root/child" />
<xsl:copy-of select="$strNs" />
</xsl:template>
</xsl:stylesheet>
Производит
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:exsl="http://exslt.org/common">
<child/>
</root>
<child xmlns:exsl="http://exslt.org/common"/><root><child></child></root>
Код показывает, что набор узлов можно создать из RTF и использовать в атрибуте select. Попытка создать набор узлов из строки приводит к строке со встроенными объектами (т. е. и ). Строка не может быть определена без использования сущностей. Этот вопрос представляет собой упрощение попытки передать внешнюю строку в таблицу стилей из .NET System.Xml.Xsl и преобразовать эту строку в набор узлов.
disable-output-escaping
, чтобы отменить экранирование строки и сохранить результат в файл; во втором проходе обработайте полученный файл, используя другую таблицу стилей XSLT. - person michael.hor257k   schedule 04.09.2019$str
содержит экранированные символы. Точно так же, если вы передаете ту же строку в качестве параметра или получаете ее из раздела CDATA во входном XML, синтаксический анализатор XML интерпретирует ее как строку, а не разметку. Строка не может содержать символ<
, если он не экранирован. Функцияnode-set()
здесь совершенно неуместна. - person michael.hor257k   schedule 04.09.2019