你如何使用XSL将所有元素和所有属性从PascalCase转换为camelCase?

时间:2015-02-13 21:00:36

标签: xml xslt camelcasing

我想在我的XML文件中将所有/任何元素和属性(不仅仅是我的小样本中的显式元素/属性)从PascalCase转换为camelCase。

有没有人有XSL转换可以做到这一点?

此:

<?xml version="1.0" encoding="utf-8" ?>
<Config Version="2" Name="Test">
    <Process Name="Main">
        X
    </Process>
</Config>

应该成为这个:

<?xml version="1.0" encoding="utf-8" ?>
<config version="2" name="Test">
    <process name="Main">
        X
    </process>
</config>

1 个答案:

答案 0 :(得分:1)

试试这个:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:output method="xml" indent="yes"/>

  <!-- everything not mentioned below (e.g. text, comments, processing instructions) -->
  <xsl:template match="node()">
    <xsl:value-of select="."/>
  </xsl:template>

  <!-- attributes -->
  <xsl:template match="@*">
    <xsl:attribute name="{concat(translate(substring(local-name(), 1, 1),'QWERTYUIOPASDFGHJKLZXCVBNM','qwertyuiopasdfghjklzxcvbnm'), substring(local-name(), 2))}">
      <xsl:value-of select="."/>
    </xsl:attribute>
  </xsl:template>

  <!-- elements -->
  <xsl:template match="*">
    <xsl:element name="{concat(translate(substring(local-name(), 1, 1),'QWERTYUIOPASDFGHJKLZXCVBNM','qwertyuiopasdfghjklzxcvbnm'), substring(local-name(), 2))}">
      <xsl:apply-templates select="@* | node()"/>
    </xsl:element>
  </xsl:template>


</xsl:stylesheet>

注意:如果使用XSLT 2,您可以使用translate函数替换lower-case函数。

相关问题