<xsl:for-each select ="block4">
<xsl:choose>
<xsl:when test="tag[name = '57A']">
<xsl:value-of select="value"/>
</xsl:when>
<xsl:when test="tag[name = '57D'] ">
<xsl:value-of select="value"/>
</xsl:when>
</xsl:choose>,<xsl:text/>
</xsl:for-each>
我已经像这样写了我的xslt。这个xml不能正常工作:
<tag>
<name>57A</name>
<value>NORTESMM</value>
</tag>
有时标签的名称会发生变化。它应该是 57A 或 57D ,如上面的XSLT所示。但它没有产生正确的结果。
答案 0 :(得分:0)
将您的选择更改为:
<xsl:value-of select="tag/value"/>
完成计划:
<强> XML:强>
<blocks>
<block4>
<tag>
<name>57A</name>
<value>NORTESMM</value>
</tag>
</block4>
<block4>
<tag>
<name>57D</name>
<value>FOO</value>
</tag>
</block4>
</blocks>
<强> XSL:强>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="blocks">
<xsl:for-each select="block4">
<xsl:choose>
<xsl:when test="tag[name = '57A']">
<xsl:value-of select="tag/value"/>
</xsl:when>
<xsl:when test="tag[name = '57D'] ">
<xsl:value-of select="tag/value"/>
</xsl:when>
</xsl:choose>,<xsl:text/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<强>输出:强>
NORTESMM,FOO
答案 1 :(得分:0)
试试这个
<xsl:for-each select ="block4">
<xsl:choose>
<xsl:when test="tag/name = '57A'">
<xsl:value-of select="tag/value"/>
</xsl:when>
<xsl:when test="tag/name = '57D'">
<xsl:value-of select="tag/value"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
您可以使用简单的XML测试XSLT,创建两个文件test.xsl和data.xml,然后在Firefox中打开data.xml,例如:
data.xml中
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<tag>
<name>57A</name>
<value>NORTESMM</value>
</tag>
test.xsl
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<xsl:for-each select ="block4">
<xsl:choose>
<xsl:when test="tag/name = '57A'">
<xsl:value-of select="tag/value"/>
</xsl:when>
<xsl:when test="tag/name = '57D'">
<xsl:value-of select="tag/value"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</body>
</html>
</xsl:template></xsl:stylesheet>
答案 2 :(得分:0)
<xsl:template match="block4/tag">
<xsl:if test="name='57A' or name='57D'">
<xsl:value-of select="value"/>
</xsl:if>
</xsl:text>, <xsl:text/>
</xsl:template>
它可能会有所不同,具体取决于<block4>
和<tag>
代码的结构。
无论如何,我建议您learn XSLT首先,至少是基础知识,然后再使用它。
答案 3 :(得分:0)
这是XSLT中最短和最“精神”的解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tag[name='57A']">value1 </xsl:template>
<xsl:template match="tag[name='57D']">value2 </xsl:template>
</xsl:stylesheet>
应用于此XML文档时:
<t>
<tag>
<name>57A</name>
<value>NORTESMM</value>
</tag>
<tag>
<name>57D</name>
<value>NORTESMM</value>
</tag>
</t>
产生了想要的正确结果:
value1 value2
请注意:
我们使用并覆盖身份规则。这是最基本,最强大的XSLT设计模式。
我们不使用<xsl:for-each>
,也不使用XSLT条件说明。
解决方案2 :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<my:values>
<val tagname="57A">value1 </val>
<val tagname="57B">value2 </val>
<val tagname="57C">value3 </val>
<val tagname="57D">value4 </val>
<val tagname="57E">value5 </val>
</my:values>
<xsl:variable name="vVals" select=
"document('')/*/my:values/*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tag">
<xsl:value-of select="$vVals[@tagname=current()/name]"/>
</xsl:template>
</xsl:stylesheet>
当应用于同一个XML文档(上图)时,会再次生成所需的正确结果:
value1 value4
请注意:当我们想要处理tag/name
的许多不同可能值时,可以使用此解决方案。我们使用表格来匹配值,只使用一个覆盖模板。
答案 4 :(得分:-1)
试
<xsl:for-each select ="block4">
<xsl:choose>
<xsl:when test="tag/name = '57A'">
<xsl:value-of select="value"/>
</xsl:when>
<xsl:when test="tag/name = '57D'">
<xsl:value-of select="value"/>
</xsl:when>
</xsl:choose>,<xsl:text/>
</xsl:for-each>