2014-02-12 102 views
0

我想創建一個xsl文件,將現有的xml文件轉換爲另一種格式。雖然我能夠轉換大部分文件,但我遇到的問題是處理文件的前半部分。如何使一個標籤成爲另一個嵌套標籤的屬性

<generic_etd> 
    <associated_tags> 
     <master> 
     <dc.contributor>contributor</dc.contributor> 
     </master> 
     <related> 
     <dc.contributor.role>contributor role</dc.contributor.role> 
     </related> 
    </associated_tags> 
    <associated_tags> 
     <master> 
     <dc.contributor>sponsor</dc.contributor> 
     </master> 
     <related> 
     <dc.contributor.role>sponsor role</dc.contributor.role> 
     </related> 
    </associated_tags> 
    <dc.creator>gradstudent2</dc.creator> 
    <dc.date>2014-02-11</dc.date> 
    <dc.description>description</dc.description> 
    <thesis.degree.discipline>Business Administration</thesis.degree.discipline> 
</generic_etd> 

我試圖做到的是採取的信息對每個associated_tag產生以下:

<etd_ms:contributor role="contributor role">contributor</etd_ms:contributor_role> 
<etd_ms:contributor role="sponsor role">sponsor</etd_ms:contributor_role> 

因此我們的目標,我的工作對XML文件通過這個簡單的例子代表這裏是使相關標籤中的內容成爲主標籤中的內容的屬性。由於我是xsl的新手,我甚至不知道如何開始解決這個問題。這甚至有可能嗎?

編輯:我還應該指出,主標籤和相關標籤內的標籤可以不同。在這個特定的例子中,它們是相同的,但並不一定總是如此。

謝謝。

+0

如何轉換大部分文件但無法轉換左側部分?有什麼問題? –

+0

在「<關聯標記>」父項中是否總會有這兩個關聯標記(主標記和相關標記)? –

+0

我的問題是,我習慣於一次處理一行文件,而不必倒下一棵樹來獲取信息,然後再倒另一棵樹到我需要的其他信息。就像我說的我在xsl處理新手,所以我只是不確定如何繼續。 – user5013

回答

0

那好吧,這應該是相當簡單,除了一兩件事情:

  1. 首先,您的示例輸出缺少根元素。

  2. 其次,您在輸出 元素上顯示etd_ms:命名空間前綴;此前綴必須聲明並綁定到樣式表某處的名稱空間。

  3. 最後,你的輸出元素已經不匹配的開始和結束標記:<etd_ms:contributor</etd_ms:contributor_role>

除此之外,請嘗試以下樣式:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:etd_ms="http://www.yournamespacehere.com"> 

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

<xsl:template match="/"> 
<output> 
    <xsl:for-each select="generic_etd/associated_tags"> 
     <etd_ms:contributor> 
      <xsl:attribute name="role"><xsl:value-of select="related/dc.contributor.role"/></xsl:attribute> 
      <xsl:value-of select="master/dc.contributor"/> 
     </etd_ms:contributor>  
    </xsl:for-each> 
</output> 
</xsl:template> 

</xsl:stylesheet> 

應用到你的輸入(更正修復關閉元素),這產生:

<?xml version="1.0" encoding="utf-8"?> 
<output xmlns:etd_ms="http://www.yournamespacehere.com"> 
    <etd_ms:contributor role="contributor role">contributor</etd_ms:contributor> 
    <etd_ms:contributor role="sponsor role">sponsor</etd_ms:contributor> 
</output> 
+0

這是一個非常普遍的解決方案,但如果主標籤和相關標籤之間的標籤可以是任何標籤/值,該怎麼辦? – user5013

+0

然後將名稱的明確引用更改爲'*'。 –

相關問題