如何检查XML标记是否包含值并执行相应的操作



我有一个XML:

<?xml version="1.0" encoding="UTF-8"?>
<COLLECTION>
<Weight>15 kg</Weight>
<WeightUnits></WeightUnits>
</COLLECTION>

我想执行KG到LBS

我写了:

<xsl:template match="Weight">
        <weight>
            <xsl:value-of
                select="translate(., translate(., '.0123456789', ''), '') div 0.45359237" />
        </weight>
    </xsl:template>
    <xsl:template match="WeightUnits">
        <weightUnits>lbs</weightUnits>
    </xsl:template>

一切正常:

我的问题是如何检查数据是否存在于<Weight>

。e如果Weight的值存在,那么且仅当weightUnits包含LBS,如果Weight为空,weightUnits也为空。

请帮我解决这个问题。

这里是一个根本不使用任何XSLT条件运算符的解决方案:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes"/>
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>  
  <xsl:template match="Weight">
    <weight><xsl:apply-templates/></weight>
   </xsl:template>
   <xsl:template match="Weight/text()[normalize-space()]">
        <xsl:value-of
          select="translate(., translate(., '.0123456789', ''), '') div 0.45359237" />
   </xsl:template>
   <xsl:template match="WeightUnits">
     <weightUnits><xsl:apply-templates 
            select="../Weight[normalize-space()]" mode="lbs"/></weightUnits>
   </xsl:template>
   <xsl:template match="*" mode="lbs">lbs</xsl:template>
</xsl:stylesheet>

当对提供的XML文档应用此转换时:

<COLLECTION>
    <Weight>15 kg</Weight>
    <WeightUnits></WeightUnits>
</COLLECTION>

生成所需的正确结果:

<COLLECTION>
    <weight>33.06933932773163</weight>
    <weightUnits>lbs</weightUnits>
</COLLECTION>

当对以下XML文档 (<weight>为空)应用相同的转换时:

<COLLECTION>
    <Weight></Weight>
    <WeightUnits></WeightUnits>
</COLLECTION>

再次生成所需的正确结果:

<COLLECTION>
    <weight/>
    <weightUnits/>
</COLLECTION>

尝试如下:

XSLT 1.0

:

<xsl:template match="WeightUnits">
   <weightUnits>
      <xsl:if test="../Weight!=''">
        <xsl:value-of select="'lbs'"/>
      </xsl:if>
   </weightUnits>
</xsl:template>
XSLT 2.0

:

<xsl:template match="WeightUnits">
   <weightUnits>
      <xsl:value-of select="if(../Weight!='') then('lbs') else('')"/>
   </weightUnits>
</xsl:template>

相关内容

  • 没有找到相关文章

最新更新