首页 > 解决方案 > XML 转换为其他 XML

问题描述

每天我都需要将格式从 XML(A) 转换为 XML(B) 并将新的 XML 保存在服务器上。这是如何最好地存档的?

想法是:

有人可以展示将 XML 标记转换为另一个标记或属性的示例吗?

这是XML (A)

<?xml version="1.0" encoding="UTF-8"?>
<EventList><!--Movie description-->
   <listmovies>
      <Movie No="9111">
         <Name>filmtitle</Name>
         <Imagepath>imagepic1.jpg</Imagepath>
         <Synopsis>Cowboy og Indianer planlægger en surprise fødselsdagsfest for Hest, men ender ud i store
                problemer da de bestiller 50 mio. mursten til barbecuegrillen, i stedet for 50. Det bliver starten på en forunderlig rejse hvor trioen rejser til Jordens midte. Kilde: Angel Distribution
      </Synopsis>
      </Movie>
   </listmovies>
   <!--Event description-->
   <Event No="0003" MovieNo="9111">
      <Period>
         <Start Date="153677" Time="44400">2020-10-02T12:20:00+02:00</Start>
      </Period>
   </Event>
</EventList>

达到的结果。XML (B)

<?xml version="1.0" encoding="UTF-8"?>
<!-- Movie description -->
<FluxAgenda>
   <Film id="9111"
         titre="filmtitle"
         resume="Cowboy og Indianer planlægger en surprise fødselsdagsfest for Hest, men ender ud i store problemer da de bestiller 50 mio. mursten til barbecuegrillen, i stedet for 50. Det bliver starten på en forunderlig rejse hvor trioen rejser til Jordens midte. Kilde: Angel Distribution"/>
   <!-- Event description -->
   <EvenementSimple id="0003" dateFin="153677">
      <Horaires>
         <Date date="2020-10-02" heure="12:20"/>
      </Horaires>
   </EvenementSimple>
   <Affiches>
      <Photo url="imagepic1.jpg" filmId="9111"/>
   </Affiches>
</FluxAgenda>

标签: phpxmlxslttransform

解决方案


您可以对输入 XML 使用简单的 XSLT 转换来获得所需的输出:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="EventList">
    <FluxAgenda>
        <xsl:apply-templates select="listmovies/Movie"/>
        <xsl:apply-templates select="Event"/>
        <xsl:apply-templates select="listmovies/Movie/Imagepath"/>
    </FluxAgenda>
  </xsl:template>
  
  <xsl:template match="Movie">
      <Film id="{@No}" titre="{Name}" resume="{Synopsis}"/>
  </xsl:template>
  
  <xsl:template match="Event">
      <EvenementSimple id="{@No}" dateFin="{Period/Start/@Date}">
          <Horaires>
            <xsl:apply-templates select="Period"/>
          </Horaires>
      </EvenementSimple>
  </xsl:template>
  
  <xsl:template match="Period">
        <Date date="{substring(Start,1,10)}" heure="{substring(Start,12,5)}"/>
  </xsl:template>
  
  <xsl:template match="Imagepath">
      <Affiches>
          <Photo url="{.}" filmId="{../../Movie/@No}"/>
      </Affiches>
  </xsl:template>
  
</xsl:stylesheet>

看到它在这里工作:https ://xsltfiddle.liberty-development.net/aixRuu/25


推荐阅读