我需要一些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>
这是我的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>
所以你可以看到我基本上希望所有节点(VALUE1,VALUE2,VALUE3等)都有值,否则不处理并转到下一节
(如果你看不到XML的想法,我也做了一个屏幕截图)
您正在尝试匹配文档中不存在的名称“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>
只要相应Date元素中的每个值都不为空,这将添加一个新的MyDate元素.
它的作用是什么
>为每个Dates元素创建一个新的MyDates元素.
>检查每个Date元素. *匹配所有孩子. [.=”]表示“空”.最后,它包含了所有这些.这意味着如果没有任何子项为空,则if仅传递.
>如果没有子项为空,则会创建一个新的MyDate元素,其中包含每个值的副本.