2010-03-29 47 views
0

我需要獲取從xml重複獲取主鍵值的幫助。這裏是xml文件。在循環中獲取關鍵字列+ XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<request id="test"> 
<dataSets> 
<dataSet name="dim_table" friendlyName="dim" tableType="DIM"> 
<fields> 
    <field name="customer_id" dataType="varchar" primaryKey="true"/> 
    <field name="customer_name" dataType="VARCHAR" primaryKey="false"/> 
    <field name="customer_address" dataType="CHAR" primaryKey="false"/> 
</fields> 
</dataSet> 
</dataSets> 
</request> 

所需的輸出是

KeycolumnName,COLUMNNAME
CUSTOMER_ID,CUSTOMER_ID
CUSTOMER_ID,CUSTOMER_NAME
CUSTOMER_ID,customer_address

誰能幫助我在這?需要

+0

示例XML不描述了節點重複(這對於轉換XML所需的XSL有很大的區別)。 – David 2010-03-29 07:50:33

+0

需要的輸出看起來很混亂。每一行輸出都有相同的customer_id嗎? customer_id和customer_name在同一迭代中不可用,除非您在「字段」節點之間進行迭代 – David 2010-03-29 08:00:32

+0

如果他們幫助您(如果您有足夠的信譽這樣做),請不要忘記加註和/或接受答案。謝謝! – David 2010-03-29 09:02:54

回答

0

XML格式爲一個完整的答案,但:

<xsl:template match="/dataSets/dataSet/fields"> 
    <xsl:for-each select="field"> 
     <xsl:value-of select="@name" /> 
    </xsl:for-each> 
</xsl:template> 

(示例代碼未測試)

使用XPath定義的 「選擇」 屬性的內容。

參考: http://www.w3schools.com/xsl/el_for-each.asp

0

更新後的代碼(前面的答案無法處理這麼多的新代碼):

此代碼的工作對我來說:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:for-each select="//dataSet"> 
      <xsl:for-each select="fields/field"> 
       KeyColumnName="<xsl:value-of select="../field[@primaryKey='true']/@name" />" ColumnName="bar <xsl:value-of select="@name" />" 
      </xsl:for-each> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
+0

注意:如果在與[primaryKey ='true']匹配的相同「字段」節點中存在多個「字段」節點,則KeyColumnName將是_all_ KeyColumnNames(不僅僅是第一個)的串聯 – David 2010-03-29 09:06:45

+0

非常感謝David.I得到了我需要的輸出。 – rajcog 2010-03-29 09:21:33