2

我敢肯定,这将是一个非常简单的问题。我有一个通过 XSL 转换的 xml 文档。此 xml 的重要部分如下所示:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Transaction>
    <EnrollmentModel>
      <FutureContributionsModel>
        <FutureContributionsElectionType>ACertainThirdParty</FutureContributionsElectionType>
      </FutureContributionsModel>
    </EnrollmentModel>
  <Transaction>
</root>

如果值<FutureContributionsElectionType>确实等于,我想添加以下内容ACertainThirdParty

<fo:table-row>
    <fo:table-cell>
        <fo:block font-family="verdanaPS" font-size="9" padding-bottom="15px" padding-top="10px">
                        The Participant has successfully opted in to use ACertainThirdParty as the managed provider for the account.
        </fo:block>
    </fo:table-cell>
</fo:table-row>

请注意,只有一个第三方,所以我不需要为自定义文本获取节点的值,我可以在那里硬编码它。

如果值<FutureContributionsElectionType>不等于ACertainThirdParty,我不想添加一大堆其他东西。

这是我尝试过的:

所以这似乎是<xsl:choose><xsl:when>/的工作<xsl:otherwise>,对吧?这是我得到的:

<xsl:choose>
  <xsl:when test="FutureContributionsModel/FutureContributionsElectionType='ACertainThirdParty'">
    <fo:table-row>
      <fo:table-cell>
        <fo:block font-family="verdanaPS" font-size="9" padding-bottom="15px" padding-top="10px">
                        The Participant has successfully opted in to use ACertainThirdParty as the managed provider for the account.
        </fo:block>
      </fo:table-cell>
    </fo:table-row>
  </xsl:when>
  <xsl:otherwise>
    <fo:table-row>
      <fo:table-cell>
          ...
          Lots of stuff
          ...
      </fo:table-cell>
    </fo:table-row>
  </xsl:otherwise>
</xsl:choose>

但是当我转换它时,否则代码会被命中而不是正确的代码(在我的 xml 中,值确实是ACertainThirdParty. 我的猜测是我的问题是我不知道 XPath,所以我可能假设我可以做的事情我不能。这是怎么回事?

4

2 回答 2

1

很可能上下文(当前节点)不是Transaction.

您可以使用绝对 XPath 表达式:

/*/Transaction/EnrollmentModel/FutureContributionsModel/FutureContributionsElectionType='ACertainThirdParty'

更好的是,避免使用显式条件——使用模板和模板匹配模式

<xsl:template match="FutureContributionsElectionType[.='ACertainThirdParty']">

  <!-- Specific Processing Here  -->
</xsl:template>

<xsl:template match="FutureContributionsElectionType[not(.='ACertainThirdParty')]">

  <!-- Other Specific Processing Here  -->
</xsl:template>
于 2012-08-09T16:09:03.460 回答
1

我不确定这是否可行,因为我不使用 XSL,但我看到了 3 个潜在问题:

  1. 您的 XPath 中有一个错字:“FutureContributionElectionType”应该是“FutureContribution sElectionType”
  2. 目前尚不清楚您的 XPath 是否应该从“FutureContributionsModel”或更早开始
于 2012-08-09T16:09:15.357 回答