2016-02-26 83 views
0

首先我希望我能理解。Tranfer屬性變成新元素

我有這樣的:

 <item> 
      <ptr target="X"/>BlahBlah 
     </item> 

而且我想將它轉換成這樣:

<li> 
     <a href="X">Blahblah</a> 
    </li> 

所有我能做的就是創造這樣的:

<xsl:template match="tei:ptr"> 
     <li> 
      <a> 
       <xsl:value-of select="parent::node()"/> 
      </a> 
     </li> 
     <xsl:apply-templates/> 
    </xsl:template> 

但結果不是我正在等待的那個:

<li> 
     <a>BlahBlah</a> 
</li>BlahBlah 

我可以更改我想要的元素,但<item>元素的內容顯示了兩次,而我忽略了顯示href屬性的方式。如果需要,我可以展示我的整個XSL表。

我通過stackoverflow搜索沒有結果,也許我只是不知道如何把我的問題的話。

有人可以幫忙解釋它是如何工作的嗎?我知道我對XSLT瞭解不多,但我在努力。

非常感謝您的回答,

馬蒂亞斯

實現這一

回答

0

一種方法是:

<xsl:template match="//item/text()"> 
    <xsl:if test="normalize-space(.) != ''"> 
     <li> 
      <xsl:element name="a"> 
       <xsl:attribute name="href"> 
        <xsl:value-of select="../ptr/@target" /> 
       </xsl:attribute> 
       <xsl:value-of select="normalize-space(.)" /> 
      </xsl:element> 
     </li> 
    </xsl:if> 
</xsl:template> 

導致

<?xml version="1.0" encoding="UTF-8"?> 
<li> 
    <a href="X">BlahBlah</a> 
</li> 

你可能會更換//item具有到item元素i的相對路徑適當。

+0

非常感謝!完美的作品 – MGL