如何在PHP中从XML回显信息

时间:2019-01-16 16:07:47

标签: php xml

我对xml文件中的回显线有一些问题。 我该怎么办?

我尝试

$test = file_get_contents('');
$test = iconv('WINDOWS-1251', 'UTF-8', $test);
$test = "<xmp>".$test."</xmp>";

尝试使用preg_match_all进行查找,但这不起作用。

preg_match_all('/<ya:created dc:date="\d+\-\d+\-\d+\T\d+\:\d+\:\d+/', $test, $output_array);

它在https://www.phpliveregex.com/上有效,但在我的网站上不可用。

https://www.phpliveregex.com/p/qCH

我的XML:

<?xml version="1.0" encoding="WINDOWS-1251"?>
<rdf:RDF
    xml:lang="ru"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xmlns:ya="http://blogs.yandex.ru/schema/foaf/"
    xmlns:img="http://blogs.yandex.ru/schema/foaf/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
  <foaf:Person>
    <ya:publicAccess>allowed</ya:publicAccess>
    <foaf:gender>male</foaf:gender>
    <ya:created dc:date="2011-01-30T16:43:45+03:00"/>
    <ya:lastLoggedIn dc:date="2019-01-16T18:54:55+03:00"/>
    <ya:modified dc:date="2019-01-13T21:15:43+03:00"/>
  </foaf:Person>
</rdf:RDF>

1 个答案:

答案 0 :(得分:0)

您最好使用SimpleXML和XPath之类的方法来访问它。至少有两种方法可以实现,这两种方法都依赖于使用XPath,但是必须使用名称空间(ya:位)来确保获得正确的元素。当XPath返回匹配列表时,我仅使用[0]来获取第一个匹配项,如果有多个匹配项,则可以使用循环...

$test = file_get_contents("data.xml");
$xml = simplexml_load_string($test);

// Version 1
// Fetch the ya:created element
$created = $xml->xpath("//ya:created")[0];
// Extract the attributes and print the date
echo $created[0]->attributes("http://purl.org/dc/elements/1.1/")->date;

// Version 2
// Extract the dd:date attribute (using the @)
$createdDate = $xml->xpath("//ya:created/@dc:date")[0];
echo $createdDate;

忘了说-如果您要将这些字段用于数据库等,则可能需要将它们转换为字符串以确保它们已被转换...

$date = (string)$createdDate;