XSLT:删除具有空的特定孙代的节点

时间:2018-12-21 14:34:45

标签: c# xml xslt geonetwork

我正在尝试使用XSLT从XML中删除一些节点。

转换部分如下:

<xsl:template match="gmd:date[gmd:CI_Date/gmd:date/gco:DateTime = null]" />

...并且XML看起来像这样:

<gmd:MD_Metadata ... >
  ...
  <gmd:identificationInfo>
    <gmd:MD_DataIdentification>
      <gmd:citation>
        <gmd:CI_Citation>
          ...
          <gmd:date>
            <gmd:CI_Date>
              <gmd:date>
                <gco:DateTime />
              </gmd:date>
              ...
            </gmd:CI_Date>
          </gmd:date>
          ...
        </gmd:CI_Citation>
        ...
      </gmd:citation>
    </gmd:MD_DataIdentification>
  </gmd:identificationInfo>
</gmd:MD_Metadata>

根据我对XSLT的了解(虽然不多),转换应该与空的grand-grandchild匹配。 但事实并非如此。 模板不匹配,转换不执行任何操作。 我已经尝试了各种方法(将其与0,默认日期时间匹配,与text()进行比较)……无济于事。

有任何线索吗?

1 个答案:

答案 0 :(得分:1)

XSLT中没有null
一个节点(文本值是一个节点)为空或不存在。

这里是空的。
因此,请检查一个空值:

<xsl:template match="gmd:date[gmd:CI_Date/gmd:date/gco:DateTime = '']" />

如果gmd:date没有价值,那么您的gco:DateTime应该消失了。