Как преобразовать XML для одного XSD в другой формат XML, который очень похож, но имеет другой файл XSD? - PullRequest
5 голосов
/ 28 февраля 2012

Как преобразовать XML для одного XSD в другой формат XML, который очень похож, но имеет другой файл XSD? XSD довольно большой и имеет много сложных типов, но фактический XML выглядит очень похоже.

У меня есть два XSD-файла и два XML-файла - они оба успешно прошли валидацию одного из XSD-файлов. Я хотел бы преобразовать один из файлов XML в другой, чтобы я мог использовать только один класс для дальнейших операций.

Как мне это сделать в .NET 4.0 и c # 4.0? Должен ли я использовать XSLT или что-то? Если мне нужно использовать XSLT, как мне это сделать? Я не уверен, что с нетерпением жду создания документа XSLT.

Это был своего рода кошмар, когда AutoMapper преобразовывал один класс XML в другой. Когда я посмотрел на XML, он был настолько похож, что я подумал, что может быть проще ...

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Я бы определенно использовал 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 голос
/ 21 июля 2013

Я использовал Altova MapForce для генерации XSLT-файла.Интерфейс прост в использовании, загружая исходные и целевые XSD / DTD-файлы, а затем сопоставляя соответствующие элементы.Затем используйте .NET для преобразования исходного XML в целевой XML с использованием файла XSLT.

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

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

...