У меня есть служба искателя, работающая в Windows (.NET Framework) для сканирования различных каналов и создания новых каналов XML.Он был построен около 10 лет назад и долгое время не использовался (около 2 лет).Если я попытаюсь запустить его сейчас на Windows Server 2012 R2, все пойдет хорошо, за исключением получения значений «xsl: value-of».Я пытаюсь решить эту проблему (раньше она работала).Кто может сказать мне, что мне не хватает?
Если я использую статический текст, это работает.Если я использую xsl: call-template с xsl: with-param (см. Код ниже), это также извлекает информацию.Только xsl: value-of не получает значения.
Это часть XML:
<?xml version="1.0" encoding="utf-8"?>
<products>
<product>
<productID>175436</productID>
<name>Best Stay Hotel</name>
<description><![CDATA[A nice place.]]></description>
<additional>
<field name="country">Cyprus</field>
</additional>
</product>
</products>
Это мой XSLT (я удалил некоторые, чтобы сделать его короче,include.xslt работает как положено):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/products">
<xml>
<products>
<xsl:apply-templates select="product"/>
</products>
</xml>
</xsl:template>
<xsl:template match="product">
<product>
<xsl:attribute name="index">
<xsl:value-of select="position()"/>
</xsl:attribute>
<pprSubsiteID>
<xsl:value-of select="normalize-space(productID)" />
</pprSubsiteID>
<details>
<pprName>
<xsl:call-template name="removeHtmlTags">
<xsl:with-param name="html" select="normalize-space(name)" />
</xsl:call-template>
</pprName>
<pprCountry>
<xsl:value-of select="normalize-space(additional/field[@name='country'])"/>
</pprCountry>
<pprDescription>
<xsl:call-template name="removeHtmlTags">
<xsl:with-param name="html" select="normalize-space(description)" />
</xsl:call-template>
</pprDescription>
</details>
</product>
</xsl:template>
<xsl:template name="removeHtmlTags">
<xsl:param name="html"/>
<xsl:choose>
<xsl:when test="contains($html, '<')">
<xsl:value-of select="substring-before($html, '<')"/>
<!-- Recurse through HTML -->
<xsl:call-template name="removeHtmlTags">
<xsl:with-param name="html" select="substring-after($html, '>')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$html"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Вот как должен выглядеть вывод:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<products>
<product index="1">
<pprSubsiteID>175436</pprSubsiteID>
<details>
<pprName>Best Stay Hotel</pprName>
<pprCountry>Cyprus</pprCountry>
<pprDescription>A nice place.</pprDescription>
</details>
</product>
</products>
</xml>
Вот результат, который я получаю:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<products>
<product index="1">
<pprSubsiteID></pprSubsiteID>
<details>
<pprName>Best Stay Hotel</pprName>
<pprCountry></pprCountry>
<pprDescription>A nice place.</pprDescription>
</details>
</product>
</products>
</xml>
Так что pprSubsiteID и pprCountry отсутствуют.
Спасибо за вашу помощь!