2013-05-22 54 views
1

好吧,這很難解釋,但我需要的是設置值的基礎上,如果來自一系列節點的當前元素匹配來自其他元素的任何其他元素另一系列節點。這可能是更好的說明,所以這裏有一個我想問的粗略例子。 說我有以下XSLT設置值取決於不同元素的比較

<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. 

一個XML我需要的是,如果從人即史密斯的名字,就會出現在任何從名稱給定的元素以其他方式設置的值作爲替代元素作爲人的名字。因此,例如我的示例將打印出

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

回答

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> 
+0

是的,這將做到這一點。謝謝一堆 – Herc