2013-04-08 7 views
-2

У меня есть один вопрос относительно преобразования xml-файлов. У меня есть файл XML (xml1), который имеет такую ​​структуру:Преобразование xml-файла в другой формат xml

<Info> 
    <cars> 
    <car> 
     <id>1</id> 
     <brand>Pegeout</brand> 
    </car> 
    <car> 
     <id>2</id> 
     <brand>Volkwagen</brand> 
    </car> 
    </cars> 
    <distances> 
    <distance> 
     <id_car>1</id_car> 
     <distance_km>111</distance_km> 
    </distance> 
    <distance> 
     <id_car>1</id_car> 
     <distance_km>23</distance_km> 
    </distance> 
    </distances> 
</Info> 

Я undestand, что я могу преобразовать один XML к другому с помощью XSLT .Как я могу генерировать таблицу стилей? Существовать дизайнера в C#?

Может кто-нибудь сказать мне, как я могу преобразовать этот формат XML-файла в этом формате (xml2) с помощью XSL таблицы стилей в C#:

<Info> 
    <cars> 
    <car> 
     <id>1</id> 
     <brand>Pegeout</brand> 
     <distance> 
      <distance_km>111</distance_km> 
      <distance_km>23</distance_km> 
     </distance> 
    </car> 
    <car> 
     <id>2</id> 
     <brand>Volkwagen</brand> 
    </car> 
    </cars> 
</Info> 
+2

StackOverflow не является кодовым письмом. Пожалуйста, прочитайте [руководство по заданию хорошего вопроса] (http://tinyurl.com/so-hints) и покажите [то, что вы пробовали] (http://whatyouhavetried.com). –

+0

Какая ошибка у вас? –

+0

http://en.wikipedia.org/wiki/XSL_Transformations может помочь. К сожалению, похоже, что не может быть anythign C# -native. –

ответ

0

Определить ключ для ссылки на элементы по идентификатору:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:key name="id" match="distance" use="id_car"/> 

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

<xsl:template match="car"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    <xsl:variable name="ref-dist" select="key('id', id)/distance_km"/> 
    <xsl:if test="$ref-dist"> 
     <distance> 
     <xsl:apply-templates select="$ref-dist"/> 
     </distance> 
    </xsl:if> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="Info/distances"/> 

</xsl:stylesheet> 
Смежные вопросы