[英]Using PHP to extract information from attributes in XML document
浏览一些有前途的标题后,我无法找到问题的答案,所以我认为我会尝试运气的!
我正在尝试从工作中使用的后端生成的XML文件中提取信息。 信息的格式不像普通的XML文档,因此提取所需信息有点困难。 我希望最终可以将这些信息放在表中,但是如果我至少可以提取这些值,我会很高兴。
示例字符串如下:
<Event Name="Last Reef" VenueName="Theater" EventDate="2014-03-21 15:00:00" DirectLink="https://tickets.ctsciencecenter.org/Public/loader.asp?target=hall.asp?event=45259"/>
我正在尝试获得:
Event Name:
Venue Name:
Event Date:
Direct Link:
我假设我需要使用substr,但是我从未处理过这样的字符串。
如果您花一点时间看一下,我将不胜感激!
simplexml_load_string()
使处理XML的基本任务变得容易:
<?php
$event= simplexml_load_string('<Event Name="Last Reef" VenueName="Theater" EventDate="2014-03-21 15:00:00" DirectLink="https://tickets.ctsciencecenter.org/Public/loader.asp?target=hall.asp?event=45259"/>');
?>
Event Name: <?= $event['Name']; ?><br>
Venue Name: <?= $event['VenueName']; ?><br>
Event Date: <?= $event['EventDate']; ?><br>
Direct Link: <?= $event['DirectLink']; ?>
或尝试使用正则表达式:
$str = '<Event Name="Last Reef" VenueName="Theater" EventDate="2014-03-21 15:00:00" DirectLink="https://tickets.ctsciencecenter.org/Public/loader.asp?target=hall.asp?event=45259"/>';
preg_match('/Name="([^"]*)".+VenueName="([^"]*)".+EventDate="([^"]*)".+DirectLink="([^"]*)"/',$str,$output);
echo '<pre>';
print_r($output);
输出:
Array
(
[0] => Name="Last Reef" VenueName="Theater" EventDate="2014-03-21 15:00:00" DirectLink="https://tickets.ctsciencecenter.org/Public/loader.asp?target=hall.asp?event=45259"
[1] => Last Reef
[2] => Theater
[3] => 2014-03-21 15:00:00
[4] => https://tickets.ctsciencecenter.org/Public/loader.asp?target=hall.asp?event=45259
)
下面是我想到的一个简单示例,该示例使用XPath返回所有匹配的Event
元素,并将数据输出为HTML表( 在此处查看输出 ),并将属性名称用作列标题。 我在额外添加Event
元素来演示循环访问多个元素(和包裹Event
的中的元素Events
元素作为有效的XML文档必须有一个根元素)。
<?php
function FormatData($data, $linkText = 'Link') {
if (substr($data, 0, 4) === 'http') {
if ($linkText === '') $linkText = $data;
return sprintf('<a href="%s">%s</a>', $data, $linkText);
} else {
return $data;
}
}
$xmlData = simplexml_load_string('<Events><Event Name="Last Reef" VenueName="Theater" EventDate="2014-03-21 15:00:00" DirectLink="https://tickets.ctsciencecenter.org/Public/loader.asp?target=hall.asp?event=45259"/><Event Name="Hidden Universe" VenueName="Theater" EventDate="2014-03-22 13:00:00" DirectLink="https://tickets.ctsciencecenter.org/Public/loader.asp?target=hall.asp?event=45695"/></Events>');
// do a global search to retrieve all "Event" elements
$events = $xmlData->xpath('//Event');
if (count($events) > 0) {
// get attribute names of first "Event" element
foreach($events[0]->attributes() as $attribute) {
$attributeNames[] = $attribute->getName();
}
// output as table column headings
echo '<table border="1"><tr><th>' . implode('</th><th>', $attributeNames) . '</th></tr>';
// iterate through each "Event" element and access each attribute value
foreach($events as $event) {
echo '<tr>';
foreach($attributeNames as $attributeName) {
echo '<td>' . FormatData($event[$attributeName]) . '</td>';
}
echo '</tr>';
}
echo '</table>';
} else {
echo 'No matching elements found';
}
?>
我认为,SimpleXml可以做到这一点。 像这样添加一些:
$xml_string = '<Event Name="Last Reef" VenueName="Theater" EventDate="2014-03-21 15:00:00" DirectLink="https://tickets.ctsciencecenter.org/Public/loader.asp?target=hall.asp?event=45259"/>';
$xml = simplexml_load_string('<?xml version="1.0"?> '.$xml_string);
$attributes =$xml->attributes();
echo 'Event Name:'.$attributes['Name'];
echo 'Venue Name:'.$attributes['VenueName'];
echo 'Event Date:'.$attributes['EventDate'];
echo 'Direct Link:'.$attributes['DirectLink'];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.