2015-12-14 24 views
0

早上好!我只有一個小問題。我有一個XML結構,這裏有一個例子XSL - 組合以下兄弟在每個循環中

<?xml version="1.0" encoding="UTF-8"?> 
<div type="letter"> 
     <head> 
      <persName type="creator"> 
      <forename>Theo</forename> 
      <surname>Barnes</surname> 
      </persName> 
      <persName type="addressee"> 
      <forename>Alex</forename> 
      <surname>Rollett</surname> 
      </persName> 
     </head> 
     <opener> 
      <dateline> 
      <date when="2015-01">2015-01</date> 
      <placeName key="Graz">Graz</placeName> 
      </dateline> 
      <salute>Hello everybody</salute> 
     </opener> 
</div> 

這裏是我的XSL樣式表:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 

<xsl:template match="/"> 
     <div> 
      <head> 
       <xsl:for-each select="//persName[@type='creator']"> 
       <xsl:text> From </xsl:text> 
         <xsl:value-of select="forename"/> 
         <xsl:text> to </xsl:text> 
         <xsl:value-of select="following-sibling::persName[1]/forename"/> 
        <xsl:if test="position() != last()"> 
        </xsl:if> 
        <xsl:text> at </xsl:text> 
        <!-- her is the error, i think but why--> 
        <xsl:value-of select="dateline[1]/date"/> 
       </xsl:for-each> 
      </head> 
     </div> 
    </xsl:template> 
</xsl:stylesheet> 

我有問題,那我不能夠添加日期變更線或價值placeName並不重要。 Id也應該在一個循環中工作,因爲這只是文檔的簡短剪輯。所以我的問題是我的錯誤在哪裏。我已經提出了代碼中的問題點。 目前的輸出是:

From Theo to Alex at 

我想到還是更好,我正在尋找以下的輸出:

From Theo to Alex at 2015-01 location Graz 

所有最好的,從你讀很快。 歡呼聲

回答

0

Context元素在下面的部分persName,因爲它裏面的foreach循環你要循環的地方persName

<xsl:value-of select="dateline[1]/date"/> 

這是一個可能的XPath表達式從上下文persName得到目標date元素:

<xsl:value-of select="following::opener/dateline[1]/date"/> 
+0

謝謝你的ax表達,這也是工作。它始終是導航到XML表達式的方式或?祝你有個愉快的時光 – Mchoeti

0

確實你找到了你錯誤的恰當位置。問題在於<xsl:value-of select=""/>指令可以正確檢索所需的數據,因爲它對於每個節點都是上下文的。

有了這樣一個補丁,你會得到你想要的東西:

<xsl:value-of select="../../opener/dateline[1]/date"/> 

同樣地,對於位置信息:

<xsl:value-of select="../../opener/dateline[1]/placeName"/> 
+0

謝謝你的修復,這是現在的工作,但我認爲只工作在我的具體結構..謝謝你tipp。有沒有一個很好的教程,除了W3school或是這個錯誤的地方問 – Mchoeti