2012-11-09 17 views
2

我試圖通過使用從內容中選擇的值計算URL來更改主題中某些<a>元素的href。但是,我無法弄清楚如何根本改變href屬性。看起來attributes屬性在<replace>規則中不被理解。如何使用重氮規則計算href值

最終,我希望能夠做一些事情,如:

<replace css:theme="a.languageswitcher" attributes="href"> 
    <!-- use some XSL logic here to stitch together the new href --> 
</replace> 

所以下面的規則工作,但對我沒用:

<copy attributes="href" css:theme="a.languageswitcher" css:content="#portal-logo" /> 

<merge attributes="href" css:theme="a.languageswitcher" css:content="#portal-logo" /> 

但是這一次已經不起作用,attributes="href"使得這個規則被忽略。

<replace attributes="href" css:theme="a.languageswitcher" css:content="#portal-logo" /> 

在另一方面,如果我嘗試從頭開始重新構建<a>元素,然後我碰上通過@羅斯 - 帕特森在他的問題描述的錯誤:Diazo - Conditionally add a class to a theme element

<replace theme="//a[@class='languageswitcher']"> 
     <a class="languageswitcher"> 
     <xsl:attribute name='href'> 
      foo 
     </xsl:attribute> 
     </a> 
    </replace> 

產生錯誤:

XSLTApplyError: xsl:attribute: Cannot add attributes to an element if children have been already added to the element. 

這怎麼辦?

+0

這是真正棘手IMO ....面臨着同樣的問題 - 大量的努力後,我放棄了,只是確信的聯繫是在我的Plone內容的地方,所以我可以用一個規則把它拉在 – Danimal

回答

2
在一個主題

我用這個規則

<replace css:content-children="#hptoolbar-cerca"><xsl:attribute name="href"> 
<xsl:value-of select="//li[@id='portaltab-catalog']//a/@href" /></xsl:attribute><xsl:apply-templates select="node()"/></replace> 

修改#hptoolbar-CERCA的HREF與從內容的另一個元素的HREF。

也許這可能對你有用。

維託

+1

這是距離我目前爲止最近的 ' ' 它正確地取代了''元素的href,但它也將刪除文本中 – fulv

3

像這樣的東西應該工作:

<replace css:theme="a.languageswitcher"> 
    <xsl:for-each css:select="a.languageswitcher"> 
     <xsl:variable name="link"> 
      http://example.com 
     </xsl:variable> 
     <a href="{$link}"><xsl:copy-of select="." /></a> 
    </xsl:for-each> 
</replace> 
0

我的情況是類似的。我對我的主題代碼感到滿意,只想「替換」它的href值。在XPath在Chrome檢查複製,最簡單的規則是這樣的:

<copy attributes="href" 
     theme="/html/body/div[2]/div[1]/div/div[1]/a" 
    content="//*[@id='portal-logo']" /> 

我想到這一招成功地應用到所有的href值,但一些不工作。我發現這些<a>元素位於由JavaScript操作的代碼塊中以實現幻燈片效果。我刪除了所有相關的JavaScript代碼,然後再次複製它的「真實」XPath,最後一切正常。希望這有幫助。