0

给定一个输入 XML,如下所示:

<foodGroup>
    <fruit>
        <label>Apple</label>
        <value>1</value>
    </fruit>
    <fruit>
        <label>Banana</label>
        <value>2</value>
    </fruit>
    <vegetable/>
</foodGroup>

什么是 XSL 转换,它将检查标签 = 'Orange' 且值 = 非 0 的水果是否存在。如果它缺失,则将水果/标签和水果/值结构添加到输出中。

像这样的东西:

<foodGroup>
    <fruit>
        <label>Apple</label>
        <value>1</value>
    </fruit>
    <fruit>
        <label>Banana</label>
        <value>2</value>
    </fruit>
    <fruit>
        <label>Orange</label>
        <value>3</value>
    </fruit>
    <vegetable />
</foodGroup>
4

1 回答 1

0

相关测试是<xsl:if test="not(fruit[label = 'Orange' and value != 0])">

以下 XSLT 给出了您要求的结果:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:output method="xml" indent="yes"/>

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

  <xsl:template match="foodGroup">
    <xsl:copy>
      <xsl:apply-templates />
      <xsl:if test="not(fruit[label = 'Orange' and value != 0])">
        <fruit>
          <label>Orange</label>
          <value><xsl:value-of select="count(fruit) + 1"/></value>
        </fruit>
      </xsl:if>      
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

这假设您希望水果值每次增加 1。如果这不是一个正确的假设,请指定您希望添加的 Orange 具有什么值。

于 2012-09-27T03:37:46.323 回答