Когда вы находитесь в середине вашей обработки XSLT, все биты XML вы имеете дело с (входным документом, контекстные узлы, узел-наборы в XSL: переменные) а не текст, они оптимизируют деревья в памяти DataPower. В вашей обработке может быть какой-то момент, когда вы хотите, чтобы часть XML преобразуется в текст. В качестве примера, возможно, вы хотите его зашифровать. (Просто необработанное шифрование AES, ни одно из этих фантастических стандартов шифрования OASIS XML.) Здесь используется dp: serialize. Он преобразует набор узлов в памяти в строку, содержащую XML-синтаксический текст.
Код. Нам нужен код.
<xsl:variable name="my-node-set">
<xyzzy>
<plugh>Nothing happens.</plugh>
</xyzzy>
</xsl:variable>
<xsl:variable name="my-xml-string">
<dp:serialize select="$my-node-set"/>
</xsl:variable>
<xsl:variable name="my-ciphered"
select="dp:encode($alg-aes, $secret-key, $my-xml-string)"/>
Если вам нужно пойти другим путем - у вас есть строка, что вы достаточно уверены в формате XML и хотели бы, чтобы превратить его в XSL: переменная, содержащая набор узлов (так что вы можете использовать XPath для навигации по нему) - то вы бы использовать дп: синтаксический анализ:
<xsl:variable name="my-node-set"
select="dp:parse($my-string)"/>
Я никогда не вполне в состоянии понять, почему они решили осуществить < дп: упорядочивании> как расширение element и dp: parse() в качестве функции расширения. Мне кажется асимметричным.
Спасибо за ответ. Пожалуйста, помогите мне понять, если для конкретного фрагмента xml я всегда хочу его как текст. Могу ли я определить этот конкретный блок как cdata, это поможет мне в достижении того же состояния, что и сериализация, или обе функции полностью разные и используются в разных сценарии? – user3173953