仅将名称空间添加到元素并更改为大写

时间:2014-10-09 19:30:13

标签: namespaces prefix

我的xml如下所示

<Envelope>
    <content>
        <feild1>1</feild1>
         ....
        <feild10>10<feild10>

    </content>
</Envelope>

但希望xml是(将名称空间前缀添加为xs1,将内容小写c添加到大写&#34; C&#34;

<Envelope>
    <Content> <!-- Note the lower case c chnaged to Upper Case --->
        <xs1:feild1>1</xs1:feild1> <!-- and for the feild, xs1 is added as prefix -->
         ....
        <xs1:feild10>10</xs1:feild10>

    </Content>
</Envelope>

请帮助寻找XSLT 1.0

这是我的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs1="https://temp">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="*">
  <xsl:element name="{name()}" namespace="https://temp">
   <xsl:apply-templates select="@*|node()"/>
  </xsl:element>
 </xsl:template>

 <xsl:template match="@*">
  <xsl:attribute name="{name}"><xsl:value-of select="."/></xsl:attribute>
 </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

希望这有帮助

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs1="https://temp">
<xsl:template match="/">
<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<Envelope>
    <xsl:for-each select="Envelope/*">
      <xsl:variable name="root" select="local-name(.)"/>
      <xsl:variable name="temp" select="translate($root,$smallcase,$uppercase)"/>
      <xsl:variable name="temp2" select="concat(substring($temp,1,1),translate(substring($temp,2,string-length($temp)),$uppercase,$smallcase))"/>
      <xsl:element name="{$temp2}">
      <xsl:for-each select="child::*">
        <xsl:element name="xs1:{local-name(.)}" namespace="https://temp">
          <xsl:value-of select="node()"/>
        </xsl:element>
      </xsl:for-each>
      </xsl:element>
    </xsl:for-each>
</Envelope>
</xsl:template>
</xsl:stylesheet>