我有一个在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。
感谢您的所有帮助!
答案 0 :(得分:0)
<xsl:template match="products">
<xml>
<products>
<product>
<xsl:attribute name="index">
<xsl:value-of select="position()"/>
</xsl:attribute>
<pprSubsiteID><xsl:value-of select="//productID"/></pprSubsiteID>
<details>
<pprName><xsl:value-of select="//name"/></pprName>
<pprCountry><xsl:value-of select="//additional/field"/></pprCountry>
<pprDescription><xsl:value-of select="//description"/></pprDescription>
</details>
</product>
</products>
</xml>
</xsl:template>