我需要一些XSLT语法的帮助.这是我的场景,我有一个XML文件,需要转换为XML文件的不同外观,我有几个部分,如果特定节点集不包含任何值,则不应处理整个部分.
以下是XML的示例:
<Dates>
<Date>
<VALUE1></VALUE1>
<VALUE2></VALUE2>
<VALUE3></VALUE3>
<VALUE4></VALUE4>
<VALUE5>3333</VALUE5>
</Date>
<Date>
<VALUE1>AAAA</VALUE1>
<VALUE2></VALUE2>
<VALUE3>JJJJ</VALUE3>
<VALUE4></VALUE4>
<VALUE5>12345</VALUE5>
</Date>
</Dates>
Run Code Online (Sandbox Code Playgroud)
这是我的XSLT,if语句不能正常工作
<xsl:for-each select="Level1/Level2/Level3">
<xsl:if test="@VALUE1!=''">
<MyDates>
<value_1>
<xsl:value-of select="VALUE1"/>
</value_1>
<value_2>
<xsl:value-of select="VALUE2"/>
</value_2>
<value_3>
<xsl:value-of select="VALUE3"/>
</value_3>
<value_4>
<xsl:value-of select="VALUE4"/>
</value_4>
</MyDates>
</xsl:if>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
所以你可以看到我基本上希望所有节点(VALUE1,VALUE2,VALUE3等)都有值,否则不处理并转到下一节
(如果你看不到XML的想法,我也做了一个屏幕截图)
Chr*_*org 12
您正在尝试匹配文档中不存在的名称为"Level1","Level2"等的xml元素.然后,您正在寻找最后一个元素的VALUE1属性.
我想你想要这样的东西:
<xsl:for-each select="Dates">
<MyDates>
<xsl:for-each select="Date">
<xsl:if test="not(*[.=''])">
<MyDate>
<value_1>
<xsl:value-of select="VALUE1"/>
</value_1>
<value_2>
<xsl:value-of select="VALUE2"/>
</value_2>
<value_3>
<xsl:value-of select="VALUE3"/>
</value_3>
<value_4>
<xsl:value-of select="VALUE4"/>
</value_4>
</MyDate>
</xsl:if>
</xsl:for-each>
</MyDates>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
只要相应Date元素中的每个值都不为空,这将添加一个新的MyDate元素.
它的作用是什么
*场比赛的所有孩子.[.='']意思是"空的".最后,它包含了所有这些.这意味着如果没有任何子项为空,则if仅传递.