需要搜索节点。如果不存在则需要使用xslt进入空节点

时间:2014-09-15 08:39:56

标签: xslt

以下是对Web服务的响应。

   <Envelope>
      <Body>
        <searchItemResponse>
          <status>
            <statusCode>Success</statusCode>
          </status>
          <itemList>
            <itemWithWarehouses>
              <item>
                <originOfData>SME</originOfData>
                <itemNumbers>
                   <shortNumber>115632</shortNumber>
                   <tssArticleNumber>PT0401450-T46N</tssArticleNumber>
                   <relatedItems>
                      <alternateItemsNumber>ORAR00428-N7083</alternateItemsNumber> 
                   </relatedItems>
              </item>
              <warehouseItems>
                   .....................
              </warehouseItems>
              <warehouseItems>
                   .....................
              </warehouseItems>
            </itemWithWarehouses>
          </itemList>
        </searchItemResponse>
      </Body>
    </Envelope>

在某些情况下,缺少以下节点。

<relatedItems>
  <alternateItemsNumber>ORAR00428-N7083</alternateItemsNumber> 
</relatedItems>

我需要确定节点是否不存在,我需要插入如下所示的节点

<relatedItems>
  <alternateItemsNumber/>
</relatedItems>

我需要一个XSLT。请帮我。感谢

1 个答案:

答案 0 :(得分:0)

您可以使用模板查找没有itemNumbers元素的任何relatedItems,然后添加空元素:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" version="2.0" xpath-default-namespace="" exclude-result-prefixes="#all">
    <xsl:output method="xml" encoding="utf-8" indent="yes"/>

    <xsl:template match="itemNumbers[not(relatedItems)]">
        <xsl:copy>
            <xsl:apply-templates select="*"/>
            <xsl:element name="relatedItems">
                <xsl:element name="alternateItemsNumber"/>
            </xsl:element>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>    

</xsl:stylesheet>