我对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>
答案 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;