为什么相等性检查在 xslt 中不起作用?
why equality check not work in xslt?
我做了一个xslt的简单演示。我想打印速率为 25
的 video_urls
标签值。我在外部标记中为每个循环添加并获取标记值?
Сan 我添加嵌套 foreach
循环以获得 url 其速率为 25
?
这是我的来源XML:
<catalog>
<cd>
<title>Empire Burlesque</title>
<urls>
<video_urls rate ="25">
abccc
</video_urls>
<video_urls rate ="30">
sdfsdf
</video_urls>
</urls>
</cd>
<cd>
<title>Unchain my heart</title>
<video_urls rate ="25">
123nnn
</video_urls>
<video_urls rate ="30">
pppppp
</video_urls>
</cd>
</catalog>
XSLT 代码:
<xsl:template match="/">
<xsl:for-each select="catalog/cd">
<xsl:value-of select="title"/>
<xsl:value-of select="urls/video_urls/@rate='25'"/>
</xsl:for-each>
</xsl:template>
预期输出
Empire Burlesque
abccc
Unchain my heart
123nnn
您只能直接访问那些具有特定属性值的值,如下所示,
您正试图错误地访问该属性,
urls/video_urls/@rate= "25"
相反,它应该被访问和检查,
urls/video_urls[@rate = 25]
您的 XML 也与节点不一致,因此模板没有为您提供所需的预期答案。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/catalog">
<xsl:for-each select="cd">
<xsl:value-of select="title"/>
<xsl:value-of select="urls/video_urls[@rate = 25]"/>
</xsl:for-each>
</xsl:template>
</xsl:transform>
为了保持一致性,您还需要修复 XML。
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<urls>
<video_urls rate ="25">
abccc
</video_urls>
<video_urls rate ="30">
sdfsdf
</video_urls>
</urls>
</cd>
<cd>
<title>Unchain my heart</title>
<urls>
<video_urls rate ="25">
123nnn
</video_urls>
<video_urls rate ="30">
pppppp
</video_urls>
</urls>
</cd>
</catalog>
已更新 link:http://xsltransform.net/jz1PuPs/3
我做了一个xslt的简单演示。我想打印速率为 25
的 video_urls
标签值。我在外部标记中为每个循环添加并获取标记值?
Сan 我添加嵌套 foreach
循环以获得 url 其速率为 25
?
这是我的来源XML:
<catalog>
<cd>
<title>Empire Burlesque</title>
<urls>
<video_urls rate ="25">
abccc
</video_urls>
<video_urls rate ="30">
sdfsdf
</video_urls>
</urls>
</cd>
<cd>
<title>Unchain my heart</title>
<video_urls rate ="25">
123nnn
</video_urls>
<video_urls rate ="30">
pppppp
</video_urls>
</cd>
</catalog>
XSLT 代码:
<xsl:template match="/">
<xsl:for-each select="catalog/cd">
<xsl:value-of select="title"/>
<xsl:value-of select="urls/video_urls/@rate='25'"/>
</xsl:for-each>
</xsl:template>
预期输出
Empire Burlesque
abccc
Unchain my heart
123nnn
您只能直接访问那些具有特定属性值的值,如下所示,
您正试图错误地访问该属性,
urls/video_urls/@rate= "25"
相反,它应该被访问和检查,
urls/video_urls[@rate = 25]
您的 XML 也与节点不一致,因此模板没有为您提供所需的预期答案。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/catalog">
<xsl:for-each select="cd">
<xsl:value-of select="title"/>
<xsl:value-of select="urls/video_urls[@rate = 25]"/>
</xsl:for-each>
</xsl:template>
</xsl:transform>
为了保持一致性,您还需要修复 XML。
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<urls>
<video_urls rate ="25">
abccc
</video_urls>
<video_urls rate ="30">
sdfsdf
</video_urls>
</urls>
</cd>
<cd>
<title>Unchain my heart</title>
<urls>
<video_urls rate ="25">
123nnn
</video_urls>
<video_urls rate ="30">
pppppp
</video_urls>
</urls>
</cd>
</catalog>
已更新 link:http://xsltransform.net/jz1PuPs/3