【问题标题】:SimpleXML get node valueSimpleXML 获取节点值
【发布时间】:2011-08-01 09:38:53
【问题描述】:

假设我有以下 XML 结构:

<?xml version="1.0" encoding="UTF-8"?>
<main>
    <parent>
        <child1>some value</child1>
        <child2>another value</child2>
    </parent>
</main>

我做了一个 XML 的变量,现在我想获取 child1 的值,所以我使用 SimpleXML:

$xml = new SimpleXMLElement($xml);
$this->xmlcode = (string) $xml->main->parent->child1;

但我收到此消息:注意:尝试在第 x 行的 /x.php 中获取非对象的属性

我也用 $xml->parent->child1 尝试过,但没有成功。

有人吗??

【问题讨论】:

  • sigh 这一定是有史以来最常见的错误之一。当您将 XML 文档加载到 SimpleXmlElement 中时,根节点是 SimpleXmlElement,例如$xml = &lt;main&gt;.
  • 感谢戈登的解释。

标签: php xml simplexml


【解决方案1】:
$xml = new SimpleXMLElement($xml);
$this->xmlcode = (string) $xml->parent[0]->child1;

【讨论】:

  • 例如,通过添加 (float) 的类型(字符串)为我解决了问题。
【解决方案2】:

可以在此处找到将 XPath 与 php 一起用于 SimpleXMLElement 的一个很好的示例 http://www.php.net/manual/en/class.simplexmlelement.php#95229

// Find the topmost element of the domDocument
$xpath = new DOMXPath($xml);
$child1 = $xpath->evaluate('/main/parent/child1')->item(0); 

【讨论】:

  • SimpleXml 可以进行 XPath 查询。无需转换为 DOM 即可。使用评估的唯一优点是在获得输入结果时,您的示例显然没有这样做。
【解决方案3】:

xpath 的变体(以及如何获取名称中包含破折号的节点内容):

<?xml version="1.0" encoding="UTF-8"?> <main>
<parent>
    <child-1>some value</child-1>
    <child-2>another value</child-2>
</parent> </main>
$xml = simplexml_load_string($content);
$node_value= (string)$xml->xpath('parent/child-1')[0];

$node_value 的结果:

“一些价值”

【讨论】:

    猜你喜欢
    • 2015-10-23
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    相关资源
    最近更新 更多