我有以下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 :(得分: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>