合并 XML 文件中的两个元素 [英] Combine two elements in XML file

查看:23
本文介绍了合并 XML 文件中的两个元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先感谢您的帮助!

我有一个如下所示的 xml:

I have an xml that looks like this:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE tv SYSTEM "xmltv.dtd">

<tv source-info-url="http://tvschedule.zap2it.com/" source-info-name="zap2it.com" generator-info-name="zap2xml" generator-info-url="zap2xml@gmail.com">
<channel id="I16689330.labs.zap2it.com">
    <display-name>502 WCBSDT</display-name>
    <display-name>502</display-name>
    <display-name>WCBSDT</display-name>
    <icon src="https://zap2it.tmsimg.com/h3/NowShowing/16689/s28711_h3_aa.png" />
</channel>
<programme start="20180303203000 -0500" stop="20180303230000 -0500" channel="I20453335.labs.zap2it.com">
    <title lang="en">NBA Basketball</title>
    <sub-title lang="en">Boston Celtics at Houston Rockets</sub-title>
    <desc lang="en">From the Toyota Center in Houston.</desc>
    <category lang="en">Sports</category>
    <category lang="en">Basketball</category>
    <length units="minutes">120</length>
    <icon src="https://zap2it.tmsimg.com/assets/p14464724_tb2_v5_aa.jpg" />
    <url>https://tvlistings.zap2it.com//overview.html?programSeriesId=SP00371600&amp;tmsId=SP003716000000</url>
    <episode-num system="dd_progid">SP00371600.0000</episode-num>
    <new />
    <subtitles type="teletext" />
</programme>
</tv>

我想生成这样的组合标题和副标题的内容:

I would like to generate something like this that combines title with sub-title:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE tv SYSTEM "xmltv.dtd">

<tv source-info-url="http://tvschedule.zap2it.com/" source-info-name="zap2it.com" generator-info-name="zap2xml" generator-info-url="zap2xml@gmail.com">
<channel id="I16689330.labs.zap2it.com">
    <display-name>502 WCBSDT</display-name>
    <display-name>502</display-name>
    <display-name>WCBSDT</display-name>
    <icon src="https://zap2it.tmsimg.com/h3/NowShowing/16689/s28711_h3_aa.png" />
</channel>
<programme start="20180303203000 -0500" stop="20180303230000 -0500" channel="I20453335.labs.zap2it.com">
    <title lang="en">NBA Basketball: Boston Celtics at Houston Rockets</title>
    <desc lang="en">From the Toyota Center in Houston.</desc>
    <category lang="en">Sports</category>
    <category lang="en">Basketball</category>
    <length units="minutes">120</length>
    <icon src="https://zap2it.tmsimg.com/assets/p14464724_tb2_v5_aa.jpg" />
    <url>https://tvlistings.zap2it.com//overview.html?programSeriesId=SP00371600&amp;tmsId=SP003716000000</url>
    <episode-num system="dd_progid">SP00371600.0000</episode-num>
    <new />
    <subtitles type="teletext" />
</programme>
</tv>

如果可以用 php 脚本来完成就更好了

If it can be done with a php script that would preferable

推荐答案

所以如果我们在 $string 中有 XML 字符串,我们可以用 simplexml_load_string 把它解析成一个 XML 对象代码>:

So if we have the XML string in $string, we can parse it into an XML object with simplexml_load_string:

$xml = simplexml_load_string($string);

然后访问元素作为对象属性:

And then access elements as object properties:

> echo $xml->title;
NBA Basketball

要构建您想要的组合属性,它就像(注意必须如何处理破折号特殊字符)一样直观:

To build your desired combined property, it is as intuitive as (note how the dash special character must be handled):

$xml->title .= ': '.$xml->{'sub-title'};

因为我们已经把sub-title属性合并到了title中,所以不再需要了:

Because we have combined the sub-title attribute into title, we no longer need it:

unset($xml->{'sub-title'});

然后打印整个对象:

> echo $xml->asXML();
<?xml version="1.0"?>
<programme start="20180303203000 -0500" stop="20180303230000 -0500" channel="I20453335.labs.zap2it.com">
    <title lang="en">NBA Basketball: Boston Celtics at Houston Rockets</title>

    <desc lang="en">From the Toyota Center in Houston.</desc>
    <category lang="en">Sports</category>
    <category lang="en">Basketball</category>
    <length units="minutes">120</length>
    <icon src="https://zap2it.tmsimg.com/assets/p14464724_tb2_v5_aa.jpg"/>
    <url>https://tvlistings.zap2it.com//overview.html?programSeriesId=SP00371600&amp;tmsId=SP003716000000</url>
    <episode-num system="dd_progid">SP00371600.0000</episode-num>
    <new/>
    <subtitles type="teletext"/>
</programme>

示例完整执行:

<?php 
$string = file_get_contents('xmltv.xml'); 
$xml = simplexml_load_string($string); 
$xml->title .= ': '.$xml->{'sub-title'}; 
unset($xml->{'sub-title'}); 
file_put_contents('xmltv.xml', $xml->asXML());
?>

这篇关于合并 XML 文件中的两个元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆