php - simplexml_load_file 无法加载 XML 文件
问题描述
我正在尝试对 XML 数据进行一些非常基本的解析,但失败得很惨。
我有一个 metadata.xml 文件,如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<metadata>
<page>
<filename>products.php</filename>
<title>Best selection of products in Anytown, USA</title>
<description>We sell quality products</description>
</page>
<page>
<filename>services.com</filename>
<title>Great services anywhere within Anytown</title>
<description>Our services are pretty good</description>
</page>
</metadata>
我正在尝试使用以下代码获取特定 XML 条目的结果:
<?php
$str = simplexml_load_file("metadata.xml") or die("Couldn't load file");
$data = new SimpleXMLElement($str);
// Find the element with specific filename
$nodes = $data->xpath('//metadata/page/filename[.="products.php"]/parent::*');
$result = $nodes[0];
echo "Title: " . $result->title . "\n";
echo "Description: " . $result->description . "\n";
?>
这会导致错误:
警告:SimpleXMLElement::__construct(): Entity: line 4: parser error : start tag expected, '<' not found in /var/www/html/php_xml_test.php on line 10
致命错误:未捕获的异常:字符串无法在 /var/www/html/php_xml_test.php:10 中解析为 XML 堆栈跟踪:#0 /var/www/html/php_xml_test.php(10): SimpleXMLElement->__construct( '\n\t\n\t\n') #1 {main} 在第 10 行的 /var/www/html/php_xml_test.php 中抛出
如果我将 XML 文件的内容直接加载到 php 文件中,一切正常。
我在这里阅读了一堆相关的帖子,但无法弄清楚我哪里出错了。
谢谢!
解决方案
根据http://php.net/manual/en/simplexmlelement.construct.php我调整了这样的代码:
<?php
$data = new SimpleXMLElement('metadata.xml', 0, TRUE);
// Find the element with specific filename
$nodes = $data->xpath('//metadata/page/filename[.="services.php"]/parent::*');
$result = $nodes[0];
echo "Title: " . $result->title . "\n";
echo "Description: " . $result->description . "\n";
?>
推荐阅读
- angular - Angular 7 - 重用组件来显示过滤的集合
- java - 在我的组件树窗口中找不到设备屏幕选项
- javascript - 为什么 tooltipPosition = "fixed" 不起作用 (amCharts v4)
- mysql - 如何从 mysql 5.0 中删除或删除重复的整体
- qt - 如何在数据更改时显示 QAbstractListModel 的单个项目并更新 Gui
- html - 垂直对齐网格内右对齐的导航栏项目
- dart - Flutter 'Compute' 内存泄漏 - 如何停用计算实例使用的堆变量?
- json - 使用 Git 管理 package.json 和 package-lock.json
- android - 使用 Android Jetpack Navigation 时如何防止 Navigation
- python - python中的数学公式不起作用