- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我是 PHP 中 simplexml 解析器
的新手。我已经运行了我发现的示例,并且它们按广告宣传的那样工作。虽然我无法让它与我的程序一起工作。我在这里搜索了几个小时。
我有一个名为 core.xml 的 XML 文件(注意节点标签中有冒号):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dc:title>Lecture 3</dc:title>
<dc:creator>John Brown & Greg Smith</dc:creator>
<cp:lastModifiedBy>Greg Smith</cp:lastModifiedBy>
<cp:revision>165</cp:revision>
<dcterms:created xsi:type="dcterms:W3CDTF">2010-02-19T04:37:55Z</dcterms:created>
<dcterms:modified xsi:type="dcterms:W3CDTF">2014-01-30T02:41:30Z</dcterms:modified>
</cp:coreProperties>
我使用以下代码将其加载到解析器中:
if (file_exists('core.xml')){
echo 'file exists <br>';
$xml_core = simplexml_load_file('core.xml');
print_r($xml_core);
}
else
{
exit('Failed to open core.xml.');
}
文件存在,但我在 print_r 得到的是:
file exists
SimpleXMLElement Object ( )
如何访问节点?我必须使用的其他 XML 文件有很多层次。
谢谢
最佳答案
您在问题中描述的错误模式实际上是正确的行为,而不是错误。
如果您在 SimpleXMLElement 上使用 print_r
(或 var_dump
),它只会向您显示一些基本信息 关于该对象,不是 XML 文档的全部内容。
要查看整个 XML,请改用 the asXML()
method。或者,要获取调试信息,您可以使用专门了解如何调试 SimpleXMLElement 内容的库,例如 simplexml_debug 编写的 IMSop。
在您的特定情况下,该对象显示为空(无对象成员),因为在默认命名空间(请参阅:Namespaces in XML 1.0)中的 XML 文档中没有任何节点 - 在 more or less complex rules of SimpleXMLElement to array transitions were applied 之后 - 将从对象传递然后显示 print_r
或 var_dump
函数的内部调试处理程序。所以只给出了类名,这样你就可以看到它是某个类的对象——并且没有成员:
SimpleXMLElement Object ( )
^ ^ ^
object type | `------ object fields (empty)
|
variable type
如何处理?非常简单:了解 XML(您已经知道)并从中获取记录的数据:
由于您的 XML 元素名称包含冒号,您应该知道这些被称为 XML namespaces 。正如您在 print_r
输出中看到的差异一样,您还将看到在访问该 namespace 内的子元素方面的差异。您必须使用 children()
method 并指定您想要获取其子元素的命名空间。如果您使用 xpath()
方法访问元素,您需要先注册一个命名空间前缀,然后再在调用该方法的 SimpleXMLElement 上使用它。
现场有一些精选的 SimpleXML 和 XML 命名空间相关问答 Material :
您也可以从 PHP 手册中获取此信息,只需查看 SimpleXMLElement API documentation 中的命名空间相关信息即可。
关于php simplexml_load_file - 无法在 print_r 中看到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31901367/
我想打印数组变量$foo。所以我已经完成了 {$foo|@print_r} 这个,但是它的打印像 "{$foo|@print_r}" 在首页上。 我正在使用 Oxied eshop 并将 smarty
我正在使用 print_r 作为数组,但它没有在浏览器中以“人类可读”的方式打印它。它只是像我回应的那样打印: Array ( [0] => Array ( [uid1] => 012345 [uid
我希望能够根据 print_r 数组语句的内容生成一个格式良好的表格,其中包含行和列? 有什么想法吗? 最佳答案 这是一种使用 html pre 标记打印漂亮数组的非常简单的方法: '; print_
我正在尝试调试为什么以下查询不返回结果集。当我尝试使用 print_r 调试它以查看此 sql 返回的内容时,我得到了 sql 语句本身而不是结果集。有人可以帮我解决为什么这不返回结果集吗? 编辑:我
这个问题在这里已经有了答案: Make var_dump look pretty (15 个回答) 6 个月前关闭。 我用了print_r函数打印从数据库中的表中获取的数组。而不是像这样格式良好的数组
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicate: putting print_r results in variable 我正在抛出异常并尝试在异常中包含一个变
我正在尝试调试为什么以下查询不返回结果集。当我尝试使用 print_r 调试它以查看此 sql 返回的内容时,我得到了 sql 语句本身而不是结果集。有人可以帮我解决为什么这不返回结果集吗? 编辑:我
在 Python 中是否有可能做类似的事情: echo 'Content of $var is ', print_r($var, TRUE); 在 PHP 中? 我有一个变量 var,我想将它的内容以
我再次寻求帮助。 我找到了这个停用词脚本 - 我基本上从字符串中删除了所有常用词。 tag’s keyword attribute is not the page rank panacea it o
我在使用 print_r 函数时遇到了一些问题。毫无疑问,我在它的操作中误解了一些东西......基本上,我在一个类中有一个对象数组,如下所示: public $fields = array(); 这
所以我有以下代码: $sql = mysql_query("SELECT result FROM table1"); $result = mysql_fetch_array($sql); print_
当我运行以下代码时: echo $_POST['zipcode']; print_r($lookup->query($_POST['zipcode'])); ?> 结果像这样连接在一行上:10952A
我有一个类,它实际上对一个复杂的数组进行操作,以使操作更简单。原始数组的格式如下所示: array( array( "name" =>"foo", "type"
我试图在我的 php 中获取一个变量转储,所以我正在使用: print_r(get_defined_vars()); 生成它,但无论我在哪里插入代码,它都会导致空白页。有什么想法吗? 最佳答案 其中一
在这种情况下,如何使用 at 符号 (@) - @order 访问属性?这是 print_r 函数的输出: [0] => stdClass Object ( [@order]
这个问题已经有答案了: How create an array from the output of an array printed with print_r? (11 个回答) 已关闭10 年前。
print_r(array('name'=> 'bob', 'age' => 20, 'sex' => 'man')); 然后: Array { [name] => bob, [age
我知道每当我写的时候 $food = array('fruit'=>'apple', 'veggie'=>'tomato', 'bread'=>'wheat'); $text = print_r($f
我在数据库中创建了一个成员表,并输入用户名行作为用户,输入密码行作为密码。然后我编写了一个脚本,必须在数据库中显示密码和用户名。就是这样: "; $username = array($db_field
我正在尝试将 print_r 输出插入数据库? 在数据库中,结果是1? 如何解决这个问题? prepare($SQL); $q->bindValue(":process_id", $p
我是一名优秀的程序员,十分优秀!