XML
<MessageBody>
<SerialNumbers>
<cmn:Serial>010088202501033821100011946933</cmn:Serial>
<cmn:Serial>010088202501033821100015310495</cmn:Serial>
<cmn:Serial>010088202501033821100018139350</cmn:Serial>
<cmn:Serial>010088202501033821100012121992</cmn:Serial>
<cmn:Serial>010088202501033821100016483276</cmn:Serial>
<cmn:Serial>010088202501033821100012414042</cmn:Serial>
<cmn:Serial>010088202501033821100011320392</cmn:Serial>
<cmn:Serial>010088202501033821100016102891</cmn:Serial>
<cmn:Serial>010088202501033821100013578725</cmn:Serial>
<cmn:Serial>010088202501033821100018119185</cmn:Serial>
</SerialNumbers>
</MessageBody>
XSLT
<xsl:for-each select="cmn:Serial">
<fieldvalidation>
<validtedfield>Serial</validtedfield>
<value><xsl:value-of select="SerialNumbers/cmn:Serial"/></value>
<xsl:choose>
<xsl:when test="SerialNumbers/cmn:Serial != ''">
<status>Valid</status>
<reason></reason>
</xsl:when>
<xsl:otherwise>
<status>Not Valid</status>
<reason>Serial should not be empty.</reason>
</xsl:otherwise>
</xsl:choose>
</fieldvalidation>
</xsl:for-each>
我试图转换转换,但我努力工作,我没有做任何错误转换工作正常的其他xml标签,但输出xml
没有显示的序列号答案 0 :(得分:1)
如果taskIdentifier
处理for-each
元素,则内部路径需要是相对的,因此要选择内部的每个元素而不是cmn:Serial
,只需要<value><xsl:value-of select="SerialNumbers/cmn:Serial"/></value>
而不是<value><xsl:value-of select="."/></value>
test="SerialNumbers/cmn:Serial != ''"
您只需要test=". != ''"
。
答案 1 :(得分:1)
嗨,最后我得到了正确答案
<xsl:for-each select="//cmn:Serial">
<fieldvalidation>
<validtedfield>Serial</validtedfield>
<value><xsl:value-of select="."/></value>
<xsl:choose>
<xsl:when test=".!= ''">
<status>Valid</status>
<reason></reason>
</xsl:when>
<xsl:otherwise>
<status>Not Valid</status>
<reason>Serial should not be empty.</reason>
</xsl:otherwise>
</xsl:choose>
</fieldvalidation>
</xsl:for-each>
在循环内你必须像这样设置以获得所有的feild值。如果你这样设置,你将获得所有字段的值,该值等于第一个字段的值
答案 2 :(得分:0)
for-each select表达式需要您需要选择的节点列表的完全限定表达式,或者需要通配符选项来选择任何深度级别的所有表达式,如下所示。 这应该适合你:
xsl:for-each select="//cmn:Serial"