1

好的,这很难解释,但我需要的是根据一个系列节点中的当前元素是否与另一系列节点中的任何其他元素匹配来设置一个 value-of。它可能会更好地说明,所以这里有一个粗略的例子来说明我在问什么。假设我有一个带有以下内容的 xml

<Person>
   <name>John Smith</name>
   <id>25</age>
   ....
</Person>
<Person>
    <name>Smith, Will</name>
    <id>22</age>
   ....
</Person>
and so on and so on

<name>
    <given>Smith, Will</given>
    <alternate>Will Smith</alternate>
</name>
<name>
    <given>BobbyJ.</given>
    <alternate>Bobby Johnson</alternate>
</name>
and so on and so on.

我需要的是,如果来自该人的姓名,即 Smith,Will 出现在姓名中的任何给定元素中,以将值设置为备用元素,否则将其设置为来自该人的姓名。所以例如我的例子会打印出来

John Smith

Will Smith

作为结果。

希望这可以在 XSLT 中完成,最好是 1.0 版,因为它可以防止错误写入的值,以确保它们的格式正确,请注意这不是我使用的示例,因为我使用的示例要复杂得多有了我继承的混乱代码,这应该是一个相关的例子,应该基本上展示我需要什么,并希望让其他人清楚。如果有帮助,我正在使用的 XSL 的一个示例是

<xsl:template match="Person">
    <xsl:variable name="person" select="."/>
    <div class="...">
        <div class="...">
            <xsl:value-of select="id"/>
            <xsl:for-each select="//name">
                    <xsl:choose>
                            <xsl:when test="given = $person/name">
                                <xsl:value-of select="alternate"/>
                            </xsl:when>
                        </xsl:choose>
                </xsl:for-each>

alternate如有必要,这会给我名字,但不是given名字。name如果它不在name元素中,我需要给出它的值。

4

1 回答 1

0
<xsl:template match="Person">
    <div class="...">
        <div class="...">
            <xsl:value-of select="id"/>
            <xsl:choose>
              <xsl:when test="//name[given = current()/name]/alternate">
                <xsl:value-of select="//name[given = current()/name]/alternate"/>
              </xsl:when>
              <xsl:otherwise>
                  <xsl:value-of select="name"/>
              </xsl:otherwise>
            </xsl:choose>
        </div>
    </div>
</xsl:template>
于 2013-05-22T01:58:41.383 回答