Loops XSLT1.0按顺序连接随机值
我是XSLT新手,我正在尝试解决这个问题。我必须从XML中获取一些值并连接它们。每当我试图这样做,我只得到一个值,但我希望在我的结果中的所有4个值。XML值可以是任意顺序,但我只希望结果是特定格式。结果应为Tag61值+Tag9F01值+Tag81值+Tag4F值(请忽略+符号) 请在下面找到XMLLoops XSLT1.0按顺序连接随机值,loops,xslt,concatenation,Loops,Xslt,Concatenation,我是XSLT新手,我正在尝试解决这个问题。我必须从XML中获取一些值并连接它们。每当我试图这样做,我只得到一个值,但我希望在我的结果中的所有4个值。XML值可以是任意顺序,但我只希望结果是特定格式。结果应为Tag61值+Tag9F01值+Tag81值+Tag4F值(请忽略+符号) 请在下面找到XML <Transaction_details> <Transaction> <Detail> <tag>9F01</tag> <
<Transaction_details>
<Transaction>
<Detail>
<tag>9F01</tag>
<tag_value>9F01020001</tag_value>
</Detail>
<Detail>
<tag>9F40</tag>
<tag_value>9F40020001</tag_value>
</Detail>
<Detail>
<tag>9F021</tag>
<tag_value>9F021020001</tag_value>
</Detail>
<Detail>
<tag>81</tag>
<tag_value>81020001</tag_value>
</Detail>
<Detail>
<tag>9F44</tag>
<tag_value>9F44020001</tag_value>
</Detail>
<Detail>
<tag>94</tag>
<tag_value>94020001</tag_value>
</Detail>
<Detail>
<tag>4F</tag>
<tag_value>4F1020001</tag_value>
</Detail>
<Detail>
<tag>61</tag>
<tag_value>61020001</tag_value>
</Detail>
</Transaction>
</Transaction_details>
9F01
9F01020001
9F40
9F40020001
9F021
9F021020001
81
81020001
9F44
9F44020001
94
94020001
4F
4F1020001
61
61020001
我写的代码
<xsl:for-each select="Transaction_details/Transaction">
<xsl:variable name="TAG">
<xsl:value-of select="Detail/tag"/>
</xsl:variable>
<xsl:variable name="TotalTags">
<xsl:variable name="Tag61">
<xsl:choose>
<xsl:when test="$TAG='61'">
<xsl:value-of select="Detail/tag_value"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'No Data'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="Tag9F01">
<xsl:choose>
<xsl:when test="$TAG='9F01'">
<xsl:value-of select="Detail/tag_value"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'No Data'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="Tag81">
<xsl:choose>
<xsl:when test="$TAG='81'">
<xsl:value-of select="Detail/tag_value"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'No Data'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="Tag4F">
<xsl:choose>
<xsl:when test="$TAG='4F'">
<xsl:value-of select="Detail/tag_value"/>
</xsl:when>
<xsl: otherwise>
<xsl:value-of select="'No Data'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="concat($Tag61,$Tag9F01,$Tag81,$Tag4F)"/>
</xsl:variable>
</xsl:for-each>
在这段代码之后,当我连接这些值时,我只得到1个值。
我正在使用XSLT1.0。请问有谁能给我一些建议,如何达到预期的效果。哪一个好的选择递归模板或为每个_解决这个问题
提前谢谢大家,
Kaushik为了突出XSLT的几个问题,一个问题是如何定义
标记
变量
<xsl:variable name="TAG">
<xsl:value-of select="Detail/tag"/>
</xsl:variable>
然后将TAG
设置为所有Detail/TAG
记录的节点集
同样,当你做一个测试时,你也做了这个
<xsl:when test="$TAG='61'">
<xsl:value-of select="Detail/tag_value"/>
</xsl:when>
注意,这里实际上不需要模板匹配tag\u值
,因为内置模板只用于输出文本
仅当标签始终存在时,此操作才有效。虽然您在问题中没有提到它,但如果标签不存在,您似乎希望输出“无数据”
要做到这一点,并避免重复编码,可以使用命名模板。也试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text" indent="yes" />
<xsl:template match="Transaction_details/Transaction">
<xsl:call-template name="TagValue"><xsl:with-param name="tag" select="'61'" /></xsl:call-template>
<xsl:call-template name="TagValue"><xsl:with-param name="tag" select="'9F01'" /></xsl:call-template>
<xsl:call-template name="TagValue"><xsl:with-param name="tag" select="'81'" /></xsl:call-template>
<xsl:call-template name="TagValue"><xsl:with-param name="tag" select="'4F'" /></xsl:call-template>
</xsl:template>
<xsl:template name="TagValue">
<xsl:param name="tag" />
<xsl:variable name="value" select="Detail[tag=$tag]/tag_value" />
<xsl:value-of select="$value" />
<xsl:if test="not($value)">No Data</xsl:if>
</xsl:template>
</xsl:stylesheet>
没有数据
请忽略我写的代码。你能推荐我吗
一些代码,它将为我提供
标签61、9F01、81和4F
您的问题仍然不太清楚,但如果您想将所有Detail
s的tag\u值与列出的4个标记之一连接起来,您可以非常简单地通过以下方式:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="/Transaction_details">
<xsl:for-each select="Transaction/Detail[tag='61' or tag='9F01' or tag='81' or tag='4F']" >
<xsl:value-of select="tag_value"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
“我只有一个价值”不,你没有。你发布的代码没有任何价值。即使在纠正了语法错误之后,您所做的只是写入变量——实际上您并没有输出任何东西。也不清楚你想要得到什么样的实际结果。请编辑您的问题并添加您希望作为转换结果看到的确切代码。您好,请忽略我编写的代码。您能给我推荐一些代码,让我知道标签61、9F01、81和4F的串联标签值节点值吗?谢谢,请编辑您的问题并添加您希望作为转换结果看到的确切代码。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text" indent="yes" />
<xsl:template match="Transaction_details/Transaction">
<xsl:call-template name="TagValue"><xsl:with-param name="tag" select="'61'" /></xsl:call-template>
<xsl:call-template name="TagValue"><xsl:with-param name="tag" select="'9F01'" /></xsl:call-template>
<xsl:call-template name="TagValue"><xsl:with-param name="tag" select="'81'" /></xsl:call-template>
<xsl:call-template name="TagValue"><xsl:with-param name="tag" select="'4F'" /></xsl:call-template>
</xsl:template>
<xsl:template name="TagValue">
<xsl:param name="tag" />
<xsl:variable name="value" select="Detail[tag=$tag]/tag_value" />
<xsl:value-of select="$value" />
<xsl:if test="not($value)">No Data</xsl:if>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="/Transaction_details">
<xsl:for-each select="Transaction/Detail[tag='61' or tag='9F01' or tag='81' or tag='4F']" >
<xsl:value-of select="tag_value"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
9F01020001810200014F102000161020001