我以以下格式输入了xml。
<Root>
<PAF>
<Child1 xsi:nil="true" />
<Child2 xsi:nil="true" />
<Child3>BlahBlah</Child3>
</PAF>
</Root>
在将其转换为XML时,我想检查一下
如果<PAF>
有任何有价值的孩子(在我的情况下是<Child3>
)
然后做点什么。
如果所有孩子都有nil =“ true”
然后做点事
对于XSLT脚本,我有点陌生,到目前为止,我只能获得<PAF>
的子节点数。
有人可以根据我的情况建议我if-else语法吗?
我这里需要任何XPATH表达式吗?
感谢您的时间。
答案 0 :(得分:1)
您需要执行以下代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="www.nill.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="PAF">
<xsl:choose>
<!--Checked no data inside PAF and its descendants and not other attributes other than xsi:nill then Drop.-->
<xsl:when test="(count(descendant-or-self::*/@*[not(name() = 'xsi:nil')]) = 0) and (not(normalize-space()))"/>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
假设您处于PAX
的上下文中,则可以这样:
<xsl:choose>
<xsl:when test="*[not(@xsi:nil='true')]">
<!-- not all chiLd nodes are empty -->
<!-- DO SOMETHING HERE -->
</xsl:when>
<xsl:otherwise>
<!-- all child nodes are empty -->
<!-- DO SOMETHING ELSE -->
</xsl:otherwise>
</xsl:choose>
如果没有其他操作,请使用xsl:if
代替xsl:choose
。
请注意,xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
声明必须同时存在于XML和XSLT文档中。