合并 XML 文件中的两个元素 [英] Combine two elements in XML file
问题描述
首先感谢您的帮助!
我有一个如下所示的 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&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&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&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屋!