Я собираю данные из двух разных xml файлов с помощью таблицы стилей xsl. Когда я нахожусь в основном шаблоне, который фильтрует правильный DOM из другого файла xml, я хочу передать этот DOM другому шаблону для получения только необходимой информации обратно. Но здесь я застрял, потому что кажется, что я не могу передать структуру DOM с помощью «xsl: with-param». Когда я пробую вывод в под-шаблоне, переданный параметр будет пустым.
<xsl:variable name="data" select="/entry/document('data.xml')/documents" />
<xsl:template match="/">
<xsl:param name="matchingNodes" select="$data/document[documentInfos/documentInfo[documentInfoField = '120']/content/value = current()/ARTICLE]"/>
<xsl:if test="count($matchingNodes)">
<xsl:call-template name="PRODUCT_NAME">
<xsl:with-param name="matchingNodes" select="$matchingNodes"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="PRODUCT_NAME"/>
<xsl:param name="matchingNodes"/> <-- this is empty
...
</xsl:template>
Как я могу получить отфильтрованный документ в шаблоне или это даже невозможно?
ОБНОВЛЕНИЕ
Первый XML файл является вторым. Первый - для проверки, действительно ли статья находится в этом, чтобы разрешить преобразование.
#First XML
<?xml version="1.0" encoding="utf-8"?>
<entry>
<documents>
<document>
<name>Product A</name>
<id>100-123</id>
<documentInfos>
<documentInfo>
<locales>[de]</locales>
<content>
<language>de</language>
<value>100</value>
</content>
<documentInfoField type="">120</documentInfoField>
</documentInfo>
</documentInfos>
</document>
<document>
<name>Product B</name>
<id>200-124</id>
<documentInfos>
<documentInfo>
<locales>[en]</locales>
<content>
<language>de</language>
<value>210</value>
</content>
<documentInfoField type="">120</documentInfoField>
</documentInfo>
</documentInfos>
</document>
</documents>
</entry>
# Second XML
<?xml version="1.0" encoding="utf-8"?>
<TREE>
<BLOCK>
<STATUS>1</STATUS>
<ARTICLE>100</ARTICLE>
</BLOCK>
<BLOCK>
<STATUS>1</STATUS>
<ARTICLE>200</ARTICLE>
</BLOCK>
</TREE>
ОБНОВЛЕНИЕ 2
Теперь это работает! Я не понимаю!?! Я могу получить доступ к этому переданному параметру только тогда, когда я называю его, например,
<xsl:template name="PRODUCT_NAME"/>
<xsl:param name="matchingNodes"/>
<xsl:value-of select="$matchingNodes"/>
</xsl:template>
Но тогда возникает новая проблема. Мне нужно сопоставить только название продукта внутри этого шаблона, и теперь я увидел, что должен использовать аргумент "соответствия" в определении шаблона следующим образом:
<xsl:template match="documentInformationEntry[documentInformationField = '100']/content[language = 'de']/value>