如何将一个XSD的XML转换为另一种非常相似但具有不同XSD文件的XML格式?

时间:2012-02-28 15:38:12

标签: xml xslt xsd transform

如何将一个XSD的XML转换为另一种非常相似但具有不同XSD文件的XML格式? XSD非常大并且有许多复杂类型,但实际的XML看起来非常相似。

我有两个XSD文件和两个XML文件 - 它们都成功验证了其中一个XSD文件。 我想将其中一个XML文件转换为另一个,以便我只能使用一个类进行进一步的操作。

如何在.NET 4.0和c#4.0中执行此操作?我必须使用XSLT吗?如果我必须使用XSLT,我该怎么做?我不确定我是否期待创建一个XSLT文档。

使用AutoMapper将一个XML类转换为另一个XML类是一种噩梦。当我查看XML时,它非常相似,所以我认为可能有一种更简单的方法......

2 个答案:

答案 0 :(得分:2)

我肯定会使用XSLT。如果XML非常相似,那应该不会太困难。从身份变换开始,然后在需要更改某些内容时覆盖它。

以下示例仅将“foo”元素更改为“bar”元素。:

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

  <!--Identity Template. This will copy everything as-is.-->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!--Change "foo" element to "bar" element.-->
  <xsl:template match="foo">
    <bar>
      <xsl:apply-templates select="@*|node()"/>
    </bar>
  </xsl:template>

</xsl:stylesheet>

资源:

http://www.w3.org/TR/xslt

http://www.jenitennison.com/xslt/

http://www.mulberrytech.com/quickref/XSLT_1quickref-v2.pdf

http://www.mulberrytech.com/xsl/xsl-list/index.html#archive

此外,XSLT的很大一部分是XPath。如果您没有开发工具(我最喜欢的是oXygen),@ DimitreNovatchev有一个名为XPath Visualizer的好工具。

答案 1 :(得分:1)

我使用Altova MapForce生成XSLT文件。通过加载源和目标XSD / DTD文件然后映射匹配元素,该界面易于使用。然后使用.NET将源XML转换为使用XSLT文件的目标XML。

http://www.altova.com/mapforce.html

http://msdn.microsoft.com/en-us/library/14689742.aspx