從XML

2015-06-25 36 views
0

創建XSLT我有以下XML從XML

<City> 
     <StartDate>2015-02-10</StartDate> 
     <UpdatedBY>James</UpdatedBY> 
     <StudentCode>222</StudentCode> 
     <ExamCode>TTED</ExamCode> 
    </City> 

我需要創建一個XSLT並將其轉換爲下面的XML。

<School:Region > 
    <School:County> 
     <School:City> 
      <School:StartDate>2015-02-10T00:00:00+08:00</School:StartDate> 
      <School:UpdatedBY>James</School:UpdatedBY> 
      <School:StudentCode>222</School:StudentCode> 
      <School:ExamCode>TTED</School:ExamCode> 
     </School:City> 
    </School:County> 
    </School:Region > 

如何在每個元素前加上一個前綴'School'。我有這樣的,但不知道我做錯了什麼。

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

    <xsl:template match="/"> 
     <xsl:copy> 
      <xsl:apply-templates select="School"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="School" > 
    <City> 
     <StartDate> 
     <xsl:value-of select="Region/County/City/StartDate"/></StartDate> 
     <UpdatedBY> 
     <xsl:value-of select="Region/County/City/UpdatedBY"/></UpdatedBY> 
     <StudentCode><xsl:value-of select="Region/County/City/StudentCode"/></StudentCode> 
     <ExamCode> 
     <xsl:value-of select="Region/County/City/ExamCode"/></ExamCode> 

    </xsl:template> 
</xsl:stylesheet> 
+0

在你沒有自己的域名使用的命名空間URI(在這種情況下www.w3.org)是通常被認爲是不禮貌的和不良的軟件工程。 –

回答

0

您需要聲明「School:」命名空間前綴。

此外,你有xsl命名空間的聲明錯誤。如果沒有正確的聲明,您的XSLT處理器將無法將輸入識別爲XSLT樣式表。

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:School="YOUR-SCHOOL-NAMESPACE-URI-GOES-HERE"> 
    <!-- contents --> 
</xsl:stylesheet> 

請注意,每個名稱空間都由URI標識。將上面的佔位符替換爲命名空間的正確URI。

當您聲明名稱空間時,您可以在樣式表中使用前綴。例如。

<School:City> 
    <!-- contents go here --> 
</School:City> 
1

如何前綴的每一個元素用一個前綴「學校」。

你可以試試這個方法:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:School="http://www.w3.org/1999/XSL/Transform/School"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="*"> 
    <xsl:element name="School:{local-name()}"> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
  • xsl:template是身份模板,在這種特定的情況下,將所有屬性輸出XML。
  • 第二個xsl:template匹配源XML中的所有元素節點,並在輸出XML中創建添加了前綴School的對應元素。
的問題作爲輸入

鑑於XML,輸出如下:

<School:City xmlns:School="http://www.w3.org/1999/XSL/Transform/School"> 
    <School:StartDate>2015-02-10</School:StartDate> 
    <School:UpdatedBY>James</School:UpdatedBY> 
    <School:StudentCode>222</School:StudentCode> 
    <School:ExamCode>TTED</School:ExamCode> 
</School:City> 
+1

'在元素已經有前綴的情況下會更好。 –

+0

@MichaelKay非常有效的一點 – har07