如何消除十六进制值并重命名XML文档中的标记

时间:2012-03-27 13:05:25

标签: xml xslt

我有如下的XML文件。

  1. 具有十六进制值,这种类型的XML文件SSIS XML Task不接受。
  2. <FIRST.NAME>之类的标签,我需要将<FIRST.NAME>替换为<FIRST_NAME>
  3. 我必须在每个XML文件中更改大约40个标记。

    我怎样才能实现这两件事,谁能让我朝着正确的方向前进?

1 个答案:

答案 0 :(得分:0)

当你说“十六进制值”时,这个答案假设你的意思是十六进制字符引用。如果这不正确,请澄清。

只需通过XSLT处理器运行XML就可以解析十六进制引用。 (我用Xalan,Saxon 6.5.5和Saxon-HE / PE / EE 9.3.05进行了测试。)

除了身份转换之外,您唯一需要的是另一个重命名元素的模板。

XML输入

<some.doc>
  <some.element attr="test">
    <another.element>Here is a hex ref: &#x3A9;</another.element>
    <another.element>Here is a hex ref: &#x3A3;</another.element>
  </some.element>
</some.doc>

XSLT 1.0

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

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

  <xsl:template match="*">
    <xsl:element name="{translate(name(),'.','_')}">
      <xsl:apply-templates select="node()|@*"/>     
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

XML输出

<some_doc>
   <some_element attr="test">
      <another_element>Here is a hex ref: Ω</another_element>
      <another_element>Here is a hex ref: Σ</another_element>
   </some_element>
</some_doc>