2016-03-10 40 views
0

是否有方法可以收集標記化值的元素名稱? (Saxon-PE 9.6.0.7)XPTY0004:名稱()的第一個參數的必需項目類型爲node();提供的值具有項目類型xs:string「XSLT:獲取「Tokenized項目」的元素名稱

這裏是我的數據的樣本集:

<SET> 
    <REAL_TAGNAME> 1 2 3 4 </REAL_TAGNAME> 
</SET> 

如果非要使用此代碼:

<xsl:for-each select="SET/REAL_TAGNAME"> 
    <xsl:for-each select="tokenize(normalize-space(.),'\s+')"> 
     <Hardcode_Tag> 
      <xsl:value-of select="."/> 
     </Hardcode_Tag> 
    </xsl:for-each> 
</xsl:for-each> 

然後我會成功的有以下幾點:

<Hardcode_Tag>1</Hardcode_Tag> 
<Hardcode_Tag>2</Hardcode_Tag> 
<Hardcode_Tag>3</Hardcode_Tag> 
<Hardcode_Tag>4</Hardcode_Tag> 

但我想擺脫硬編碼的路程,想用原來的標籤名有類似:

<REAL_TAGNAME>1</REAL_TAGNAME> 
<REAL_TAGNAME>2</REAL_TAGNAME> 
<REAL_TAGNAME>3</REAL_TAGNAME> 
<REAL_TAGNAME>4</REAL_TAGNAME> 

雖然我使用xsl嘗試以下:元素,它不斷給我提到一個錯誤以上:

<xsl:for-each select="SET/REAL_TAGNAME"> 
    <xsl:for-each select="tokenize(normalize-space(.),'\s+')"> 
     <xsl:element name="{name(.)}"> 
      <xsl:value-of select="."/> 
     </xsl:element> 
    </xsl:for-each> 
</xsl:for-each> 

有沒有人有任何想法我可以解決這個問題?在此先感謝您的幫助!

回答

0

在xsl:for-each中,表達式。指的是當前項目,即從元素的字符串值中提取的當前令牌。如果你要記住,這是當前元素你輸入之前的元素的名稱的for-each,只設置內部XSL前一個變量:對,每個:

<xsl:for-each select="SET/REAL_TAGNAME"> 
    <xsl:variable name="element-name" select="name(.)"/> 
    <xsl:for-each select="tokenize(normalize-space(.),'\s+')"> 
    <xsl:element name="{$element-name}"> 
     <xsl:value-of select="."/> 
    </xsl:element> 
    </xsl:for-each> 
</xsl:for-each> 

在你展示的代碼中,當然,$ element-name的值總是爲'REAL_TAGNAME'。我認爲在一般情況下並非如此。

+0

非常感謝你的解釋!它現在可以工作了! –