从XML创建XSLT

时间:2015-06-25 09:09:05

标签: xml xslt

我有以下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>

2 个答案:

答案 0 :(得分:1)

  

如何为每个元素添加前缀&#39; School&#39;。

您可以尝试这种方式:

<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)

您需要声明“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。

声明命名空间后,只需在样式表中使用前缀即可。 E.g。

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