В вашем вопросе слишком много и слишком разнообразных выборочных данных для точного ответа, но, как сказано в комментарии, мне интересно, подходит ли подход, который определяет именованный шаблон или функцию, принимая число значений, которые вы хотите заполнить как именованные аргументы, например
<xsl:function name="mf:fill-template" as="element(Policy)">
<xsl:param name="p1"/>
<xsl:param name="p2"/>
<xsl:param name="p3"/>
<Policy xsl:expand-text="yes">
<Rule>
<foo>test {$p2}</foo>
</Rule>
<Rule att="{$p1}">
...
</Rule>
<Rule>
<header>...</header>
<value>... {$p3}</value>
</Rule>
</Policy>
</xsl:function>
, а затем при необходимости вызывает эту функцию для каждой строки в вашем тексте, например
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:mf="http://example.com/mf"
exclude-result-prefixes="#all"
version="3.0">
<xsl:function name="mf:fill-template" as="element(Policy)">
<xsl:param name="p1"/>
<xsl:param name="p2"/>
<xsl:param name="p3"/>
<Policy xsl:expand-text="yes">
<Rule>
<foo>test {$p2}</foo>
</Rule>
<Rule att="{$p1}">
...
</Rule>
<Rule>
<header>...</header>
<value>... {$p3}</value>
</Rule>
</Policy>
</xsl:function>
<xsl:param name="data" as="xs:string">P1 P2 P3
a b c
c d f
g h i</xsl:param>
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<PolicySet>
<xsl:for-each select="tail(tokenize($data, '\r?\n'))">
<xsl:sequence select="let $args := tokenize(., '\s+') return mf:fill-template($args[1], $args[2], $args[3])"/>
</xsl:for-each>
</PolicySet>
</xsl:template>
</xsl:stylesheet>
В примере для полноты и компактности используется строковый параметр, но вы, конечно, можете использовать <xsl:param name="data" select="unparsed-text('file.txt')"/>
вместо.
Пример в сети: https://xsltfiddle.liberty -development.net / bFDb2CH .
Не уверен, поможет ли это, но вставка этого предложения в комментарий будетдовольно сложно.
Я понимаю, что я не обработал ваш входной XML, а скорее предположил, что вы можете адаптировать его и создать функцию с его конструктором шаблона / последовательности.Возможно, это можно было бы автоматизировать, но в настоящее время я не вижу, как сопоставить различные имена столбцов с различными и переменными позициями текста в примере XML.