XPath Substring-After 帮助/查询/评估? [英] XPath Substring-After Help / Query/Evaluate?
问题描述
我正在构建一个 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屋!