2010-04-02 90 views
0
<result> 
    <binding name="PropertyURI"> 
     <uri>http://dbpedia.org/ontology/motto</uri> 
    </binding> 
    <binding name="Property"> 
     <literal xml:lang="en">motto</literal> 
    </binding> 
    <binding name="ValueURI"> 
     <uri>http://dbpedia.org/ontology/motto</uri> 
    </binding> 
    <binding name="Value"> 
     <literal>Ittehad, Tanzim, Yaqeen-e-Muhkam(Urdu)</literal> 
    </binding> 
</result> 

我想去改造它像如何編寫XSLT以在下列HTML中轉換以下XML?

<a href=PropertyURI>Property</a> 
<a href=ValueURI>Value</a> 

問題是結合標籤的這個數字可以不同。有時我們可能只有URI或ony值。

如何在XSLT中知道如果與@ name = PropertyURI綁定可用?
如果是,那麼下一個綁定@name屬性的名稱是什麼?

+0

@stakx謝謝。我現在看起來更好。 – 2010-04-02 09:36:20

回答

1

已經有似乎有效的答案,但我剛剛花了10分鐘測試下面的代碼,以便:

<?xml version="1.0" encoding="utf-8"?> 

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <xsl:apply-templates select="/result/binding[@name='PropertyURI']"/> 
</xsl:template> 
    <xsl:template match="binding"> 
    <a> 
     <xsl:attribute name="href"> 
     <xsl:value-of select="./uri"/> 
     </xsl:attribute> 
     <xsl:value-of select="./following-sibling::binding[1][@name='Property']/literal"/> 
    </a> 
    </xsl:template> 
</xsl:stylesheet> 
+0

感謝您的回覆。我已經用FrenchKiss測試過了。是的,這很好,我會得到一個正確的鏈接。 1.如果沒有URI而只是文字?在這種情況下,我希望將Property URI作爲錨/鏈接中的href和文本。如果只有屬性但沒有PropertyURI,則它將被轉換爲簡單文本而不是鏈接。 2. ValueURI和價值怎麼樣? – 2010-04-02 11:53:58

0

由於您對問題的描述和您期望的輸出似乎沒有關係,因此您要查找的內容並不十分清楚。我認爲你想要做的是找到一個uri孩子每binding元素,發現有一個孩子literal相關binding元素,並使用uriliteral值來填充a元素。

此模板假設兩個binding元素相關的,因爲在一個與uri孩子name屬性與上一個與literal孩子,例如在name屬性開始「PropertyURI」打頭的「財產」和「ValueURI」開始與「值」:

<xsl:template match="binding[uri]"> 
    <xsl:variable name="name" value="@name"/> 
    <xsl:variable name="literal" 
       select="/result/binding[starts-with($name, @name)]/literal"/> 
    <xsl:if test="$literal"> 
     <a href="{uri}"> 
     <xsl:value-of select="$literal"/> 
     </a> 
    </xsl:if> 
</xsl:template> 

如果相關元素僅僅是一個與uri孩子後下一個binding元素,請使用上面的模板,與替換變量賦值:

<xsl:variable name="literal" select="following-sibling::binding[1]/literal"/> 
+0

我收到錯誤消息。該元素不允許屬性值 2010-04-02 12:04:38

+0

對不起,編輯器出現了一些問題。重寫同樣的東西后沒有錯誤。 – 2010-04-02 12:07:43