原始XML包括缩进(空白字符),这与我的选择混淆

时间:2013-04-29 21:53:58

标签: xml xslt select trim normalize

我有XSL:

<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<body>
<table>
<tr>
<td><b>Song</b></td>
<td><b>Track</b></td>
</tr>
<xsl:for-each select="results/result[Artist='Michael Jackson']">
<tr>
<td><xsl:value-of select="Song"/></td>
<td><xsl:value-of select="Track"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>

源XML

<?xml version="1.0"?>
<results>
    <result>
        <Artist>
            Michael Jackson
        </Artist>
        <Song>
            Beat it 
        </Song>
        <Track>
            2 
        </Track>
    </result>
</results>

结果不会产生任何行,我希望看到一张包含结果的表格,其中Michael Jackson是艺术家。

我做了一些测试,我认为源中的缩进或空白区域会妨碍选择。

当我使用来源......

<?xml version="1.0"?>
<results>
<result>
<Artist>Michael Jackson</Artist>
<Song>Beat it </Song>
<Track>2 </Track>
</result>
</results>

有效。

不幸的是我无法控制源格式。我觉得必须有一个简单的答案,因为很多XML都是这样缩进的。

我可以使用修剪功能或通配符使[]选择/过滤器工作吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

使用normalize-space()功能:

<xsl:for-each select="results/result[normalize-space(Artist)='Michael Jackson']">