2014-01-29 57 views
0

對於我的輸入XML,我編寫了XSLT,但是我無法使XSLT正確生成<mynewtag>。請幫忙。XSLT將遞增值附加到現有屬性值

XML輸入:

<?xml version="1.0" encoding="UTF-8"?> 
<books> 
    <book.child.1> 
     <title>charithram</title> 
     <author>sarika</author> 
    </book.child.1> 
    <book.child.2> 
     <title>doublebell</title> 
     <author>psudarsanan</author> 
    </book.child.2> 
</books> 

預期輸出:

<?xml version="1.0" encoding="UTF-8"?> 
<newbooks> 
    <newbook> 
     <mynewtag id="book1" /> 
     <title>charithram</title> 
     <author>sarika</author> 
    </newbook> 
    <newbook> 
     <mynewtag id="book2" /> 
     <title>doublebell</title> 
     <author>psudarsanan</author> 
    </newbook> 
</newbooks> 

XSLT,我試圖:[I理解語法不正確對<mynewtag>。但我不知道要解決它以獲得所需的輸出。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="xml" version="1.0" encoding="UTF-8" 
     indent="yes" /> 

    <xsl:template match="/"> 
     <newbooks> 
      <xsl:for-each select="books/child::*"> 
       <newbook> 
        <mynewtag id="book<xsl:number value='position()' format='1' />" /> 
        <title> 
         <xsl:value-of select="title" /> 
        </title> 

        <author> 
         <xsl:value-of select="author" /> 
        </author> 
       </newbook> 
      </xsl:for-each> 
     </newbooks> 
    </xsl:template> 
</xsl:stylesheet> 

在網上XSLT轉換嘗試,http://www.freeformatter.com/xsl-transformer.html

我試圖分配位置給一個變量,但我仍然面對不知道如何與屬性值book其追加的同樣的問題。

<xsl:variable name="cnt"> 
    <xsl:number value='position()' format='1' /> 
</xsl:variable> 
<xsl:value-of select = "$cnt" /> 

注:如果我刪除從XSL的<xsl:number value='position()' format='1' />,那麼語法是正確的,但後來我將無法產生book1book2等爲<mynewtag>屬性值。

請幫忙。

加入<mynewtag>是必需元素。它就像輸出中所需的任何其他XML元素,如<title>。這不是僅僅保留屬性id的元素。對不起,如果有這個混淆。

,然後將溶液在這裏,從所獲得的答案來概括:

<mynewtag> 
    <xsl:attribute name="id"> 
     <xsl:text>book</xsl:text> 
     <xsl:number value='position()'/> 
    </xsl:attribute> 
</mynewtag> 

或短:

<mynewtag id="book{position()}" />" 

<newbook> 
     <xsl:variable name="cnt"> 
      <xsl:number value='position()' format='1' /> 
     </xsl:variable> 
      <mynewtag id="book{$cnt}" /> 
      .......... 

也是IanRoberts提到的屬性值模板。

+1

閱讀[屬性值模板](http://www.w3。org/TR/xslt#attribute-value-templates) –

+0

謝謝@IanRoberts提供有關屬性值模板的參考。雖然michael.hor257k已經完全回答了我的查詢,但這個額外的參考幫助我更深入地研究了它。 所以我也可以用不同的方式來達到結果。謝謝! spiderman

回答

2

您不能在另一個標籤內放置標籤。嘗試兩種:

<mynewtag> 
    <xsl:attribute name="id"> 
     <xsl:text>book</xsl:text> 
     <xsl:number value='position()'/> 
    </xsl:attribute> 
</mynewtag> 

或短:

<mynewtag id="book{position()}" />" 

新增:
不直接關係到你的問題,但我相信id屬性應適用於父<newbook>元素,而不是創建一個人造的子元素來保存它。

+0

謝謝。我嘗試了這兩個建議,它的工作原理。到底我在找什麼,IanRoberts對屬性值元素的引用[你的第二個建議]讓我更加了解它的用法。 爲了您的額外注意,將id屬性添加到元素,我明白你在說什麼,但在我的真實場景中,屬性名稱不是id,它是用於自定義目的的href。在這種情況下元素的目的不是要保存id屬性,它在真實的上下文中具有其自身的重要性。謝謝,我感謝你的幫助 – spiderman

+0

它不屬性值元素。我打算說屬性值模板。 – spiderman