【发布时间】:2014-07-08 04:27:07
【问题描述】:
我的应用程序没有为空的标记化字符串创建内容节点,所以我想知道是应用程序还是 xslt 中的东西我搞砸了。
我在表格行中有一个字符串,例如:
|0001|联合健康基金会|10 Circle LN||纽约|纽约|
像这样
|0002|红十字会|20 Bender LN|Suite 20|纽约|NY|
所以我在'|'上进行标记
<xsl:template match="/">
<xsl:apply-templates select="//tr" />
</xsl:template>
<xsl:template match="tr">
<xsl:for-each select=".">
<xsl:variable name="part" select="str:tokenize(.,'|')" />
<document>
<content name="id">
<xsl:value-of select="$part[1]" />
</content>
<content name="bizName">
<xsl:value-of select="$part[2]" />
</content>
<content name="street1">
<xsl:value-of select="$part[3]" />
</content>
<content name="street2">
<xsl:value-of select="$part[4]" />
</content>
<content name="city">
<xsl:value-of select="$part[5]" />
</content>
<content name="state">
<xsl:value-of select="$part[6]" />
</content>
</document>
</xsl:for-each>
</xsl:template>
我遇到的问题是第一行的“street2”节点(||)有一个空字符串值。所以我的应用程序将所有内容向左推一个位置,而 street2 具有城市价值,城市价值具有州价值,依此类推。
有人可以推荐一种方法来解决这个问题吗?或者这很可能是我的应用程序中的问题?
感谢您的帮助
【问题讨论】:
-
也许我遗漏了一些东西......“str”前缀与什么命名空间相关联?另外,这是 XSL 1.0 还是 2.0? (这将有助于查看顶级
xsl:stylesheet或xsl:transform元素) -
EXSLT 标记化函数中有一个会跳过空白结果的怪癖。该函数的代码在这里,如果您想亲自查看:exslt.org/str/functions/tokenize/str.tokenize.function.xsl。您可以推断该代码,或者从 michael 的答案中推断代码。