嗨,我是 xml/xslt 的新手。有人可以帮我解决以下要求吗?我有多个同名标签
<SO_ServiceType>XXXX</SO_ServiceType>
<SO_ServiceType>YYYY</SO_ServiceType>
<SO_ServiceType>ZZZZ</SO_ServiceType>
如何迭代和检查每个标签的值
从您对rene 答案的评论来看,您可能根本不需要“迭代”。当您在 XPath 表达式中进行相等比较时,其中一侧或另一侧(或两者)是节点集,则如果集中的任何节点与该值匹配,则表达式作为一个整体成功。因此
<xsl:if test="/Data/SO_Service_Type = 'A-70-00'">true</xsl:if>
true
如果任何SO_Service_Type
元素具有该值,将产生A-70-00
-for-each
不需要。
该解决方案“迭代”每个 SO_ServiceType 节点......
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="SO_ServiceType">
<xsl:if test="text()='ZZZZ'">
<sample>ZZZZ is the value</sample>
</xsl:if>
<node>
<xsl:value-of select="."/>
</node>
</xsl:template>
结果
<node>XXXX</node>
<node>YYYY</node>
<sample>ZZZZ is the value</sample>
<node>ZZZZ</node>
编辑
如果您只想在 text() 匹配的情况下在结果树中输出“true”,则A-70-00
可以执行以下操作:
<xsl:template match="SO_ServiceType">
<xsl:if test="text()='A-70-00'">true</xsl:if>
</xsl:template>
请记住,XSLT 是一种将输入转换为输出的方法。在 XSLT 中,您描述了需要应用哪些规则才能获得所需的输出结果。试着想想你想用输入节点发生什么,而不是你想如何产生输出。