XPath Substring-After 帮助/查询/评估? [英] XPath Substring-After Help / Query/Evaluate?

查看:25
本文介绍了XPath Substring-After 帮助/查询/评估?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个 php 脚本来将 xml 文件的选定内容传输到 sql 数据库..

I'm building a php script to transfer selected contents of an xml file to an sql database..

硬编码的 XML 内容之一的格式如下:

One of the hardcoded XML contents is formatted like this:

<visualURL>
id=18144083|img=http://upload.wikimedia.org/wikipedia/en/8/86/Holyrollernovacaine.jpg
</visualURL>

我正在寻找一种方法来获取 URL 的内容(img= 之后的所有文本).

And I'm looking for a way to just get the contents of the URL (all text after img=).

$Image = $xpath->query("substring-after(/Playlist/PlaylistEntry[1]/visualURL[1]/text(), 'img=')", $element)->item(0)->nodeValue;

在我的 php 输出中显示属性非对象错误.

Displays a property non-object error on my php output.

一定有另一种方法可以使用我想要的 XPath 提取 URL 内容,不是吗?

There must be another way to just extract the URL contents using XPath that I want, no?

任何帮助将不胜感激!

这是最低代码

<?php

$xmlDoc = new DOMDocument();
$xmlDoc->loadXML('<Playlist>
<PlaylistEntry>
<visualURL>
id=12582194|img=http://upload.wikimedia.org/wikipedia/en/9/96/Sometime_around_midnight.jpg
</visualURL>
</PlaylistEntry>
</Playlist>');
$xpath = new DOMXpath($xmlDoc);
$elements = $xpath->query("/Playlist/PlaylistEntry[1]");

if (!is_null($elements)) 
foreach ($elements as $element) 
$Image = $xpath->query("substring-after(/Playlist/PlaylistEntry[1]/visualURL[1]/text(), 'img=')", $element)-  >item(0)->nodeValue;
print "Finished Item: $Image";

?>

编辑 2:

经过一些研究,我相信我必须使用$xpath->评估而不是我目前使用的$xpath->查询

After some research I believe I must use $xpath->evaluate instead of my current use of $xpath->query

看这个链接相同的 XPath 查询适用于 Google 文档,但不适用PHP

我还不确定如何做到这一点..但我会在早上进行更多调查.同样,任何帮助将不胜感激.

I'm not exactly sure how to do this yet.. but i will investigate more in the morning. Again, any help would be appreciated.

推荐答案

您的方向是正确的.将 DOMXPath::evaluate() 用于不返回 node(s) 像 substring-after()(它返回链接页面中记录的 string).以下代码打印预期输出:

You're in right direction. Use DOMXPath::evaluate() for xpath expression that doesn't return node(s) like substring-after() (it returns string as documented in the linked page). The following codes prints expected output :

$xmlDoc = new DOMDocument();
$xml = <<<XML
<Playlist>
<PlaylistEntry>
<visualURL>
id=12582194|img=http://upload.wikimedia.org/wikipedia/en/9/96/Sometime_around_midnight.jpg
</visualURL>
</PlaylistEntry>
</Playlist>
XML;

$xmlDoc->loadXML($xml);
$xpath = new DOMXpath($xmlDoc);
$elements = $xpath->query("/Playlist/PlaylistEntry");

foreach ($elements as $element) {
    $Image = $xpath->evaluate("substring-after(visualURL, 'img=')", $element);
    print "Finished Item: $Image <br>";
}

输出:

Finished Item: http://upload.wikimedia.org/wikipedia/en/9/96/Sometime_around_midnight.jpg 

演示

这篇关于XPath Substring-After 帮助/查询/评估?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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