【发布时间】:2015-08-03 07:21:15
【问题描述】:
我正在做一个简单的脚本,它接受一个 XML 作为输入,修改一些值,并用另一个名称保存它。
XML 有多个命名空间,通常是嵌套的。
我正在尝试为以下问题找到一个巧妙的解决方案。
我有多个标签,它们有一个共同的子字符串,例如 Episode
<ext:EpisodeLong>Test</ext:EpisodeLong>
<ext:EpisodeBrief>Test</ext:EpisodeBrief>
<ext:EpisodeName>Test</ext:EpisodeName>
我想访问与“Episode”匹配的每个标签并修改值。
XML的相关截图:
<Title endDateTime="2015-05-21T04:06:48Z" providerVersionNum="1" startDateTime="2015-05-02T04:06:48Z" uriId="c5.channel5.com/TITL0000000000001360">
<core:Ext xmlns:core="http://www.cablelabs.com/namespaces/metadata/xsd/core/1">
<ext:LocalizableTitleExt xmlns:ext="URN:NNDS:CMS:ADI3:01"
<xml:lang="eng">
<ext:EpisodeLong>Test</ext:EpisodeLong>
<ext:EpisodeBrief>Test</ext:EpisodeBrief>
<ext:EpisodeName>Test</ext:EpisodeName>
</ext:LocalizableTitleExt>
我试图做的所有 xpath 都失败了。如果我执行下面的行,我会获取 99% 的 XML,而我只想要 Title 下的所有内容。
$results = $xml->xpath('//*[contains(E:LocalizableTitleExt, Episode)]');
foreach ($results as $s)
{
echo "DEBUG, xpath has found: ".$s."<br/>";
$elementsToRemove[] = $s;
}
*假设所有命名空间都已注册,E 为 ext,C 为 Core
想法?
提前致谢
ps:不能使用 DOM,只能使用 SimpleXML 和 XPATH
【问题讨论】: