<div>
<a href="M_TestNamespace_StoredNumber_Swap``1_2_890a5ef1.htm">
Swap
<span class="languageSpecificText">
<span class="cs"><</span>
<span class="vb">(Of </span><span class="cpp"><</span>
<span class="fs"><'</span><span class="nu">(</span>
</span>
T
<span class="languageSpecificText">
<span class="cs">></span>
<span class="vb">)</span>
<span class="cpp">></span>
<span class="fs">></span>
<span class="nu">)</span>
</span>
</a>
<div>
我想使用XSLT并将上面的内容翻译成如下结果:
<div>
Swap(T)
<div>
仅供参考,“(”和“)”来自<span class="nu"/>
。
答案 0 :(得分:0)
尝试如下:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="div">
<xsl:element name="div">
<xsl:value-of select="normalize-space(a/text()[1])"/>
<xsl:value-of select="(.//span/span[@class='nu'])[1]/text()"/>
<xsl:value-of select="normalize-space(a/text()[2])"/>
<xsl:value-of select="(.//span/span[@class='nu'])[2]/text()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我认为<div>
已正确关闭:)。
答案 1 :(得分:0)
您可能想要创建一个参数来保存'nu'值。
<xsl:param name="lang" select="'nu'" />
然后,您将能够提取特定语言的文本
<xsl:template match="span[@class='languageSpecificText']">
<xsl:value-of select="span[@class=$lang]" />
</xsl:template>
这是完整的XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:param name="lang" select="'nu'" />
<xsl:template match="a">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="span[@class='languageSpecificText']">
<xsl:value-of select="span[@class=$lang]" />
</xsl:template>
<xsl:template match="a/text()">
<xsl:value-of select="normalize-space()" />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当应用于您的示例XML时,输出以下内容
<div>Swap(T)</div>
将参数更改为“vb”,您将获得以下内容
<div>Swap(Of T)</div>
答案 2 :(得分:0)
生成所需结果的最短方法之一是:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="a">
<div><xsl:apply-templates/></div>
</xsl:template>
<xsl:template match="a/text() | span[@class='nu']/text()">
<xsl:value-of select="normalize-space()"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
<强>解释强>:
所有文本节点都会被<xsl:template match="text()"/>
忽略 - 这会有效地从输出中“删除”它们。
只有a
和span[@class='nu']
的文本节点子项被区别对待(用于在输出中生成文本节点),模板匹配:a/text() | span[@class='nu']/text()
。
使用标准XPath函数 normalize-space()
a
文字节点子节点中不需要的空白区域
醇>