XML 转换为其他 XML
Posted
技术标签:
【中文标题】XML 转换为其他 XML【英文标题】:XML transform to other XML 【发布时间】:2021-01-18 05:21:04 【问题描述】:每天我都需要将格式从 XML(A) 转换为 XML(B) 并将新的 XML 保存在服务器上。如何最好地存档?
想法是:
使用 php 提取 XML(A) 并保存到 mysql 数据库。打印出新的 XML(B)。 使用 PHP 加载 XML(A) 并转换为 XML(B)有人可以展示将 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>
【问题讨论】:
非常感谢,这项工作。 一个后续问题 @Parfait 如果我在父节点中有多个子节点怎么办?<Event No="0003" MovieNo="9111"><Period>.....</Period><Period>.....</Period><Period>.....</Period></Event>
再一次,请在已发布的答案(不是我的评论)下回复@Sebastien 的answer 而不是我。
【参考方案1】:
您可以对输入 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
【讨论】:
PHP 可以运行带有 XSL 模块的 XSLT 1.0 脚本:php.net/manual/en/xsltprocessor.transformtoxml.php 谢谢,我会调查的! 如果我在一个父节点中有多个子节点怎么办???<Event No="0003" MovieNo="9111"><Period>.....</Period><Period>.....</Period><Period>.....</Period></Event>
非常感谢,它帮助了 :)以上是关于XML 转换为其他 XML的主要内容,如果未能解决你的问题,请参考以下文章
将具有混合复杂类型元素的 XML 转换为 DataSet,以及其他 DataSet 限制