【问题标题】:How to fetch all file content from XML using xpath?如何使用 xpath 从 XML 中获取所有文件内容?
【发布时间】:2015-09-11 13:10:24
【问题描述】:

我正在开发 PHP 5.6.3

下面是 $xml 包含 XML 内容的代码。

$xml  = '<TOPTag><Order><doc DocumentName="Doc1">TEST1</doc><doc DocumentName="Doc2">TEST2</doc></Order></TOPTag>';
$stk  = simplexml_load_string($xml);
foreach($stk->xpath('/TOPTag/Order/doc') as $doc)
{
    echo "<pre>";
    print_r($doc);
    echo "</pre>";
}

我需要所有数据,包括所有文档 xpath 的文档内容。

实际上上面代码的结果在下面,它没有第一个对象的文档内容。它只返回最后一个对象的文档内容。

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [DocumentName] => Doc1
        )
    [0] => TEST1  <- NOT COMING in OUTPUT - PHP VERSION 5.6.3
)
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [DocumentName] => Doc2
        )

    [0] => TEST2
)

我们需要获取所有对象的所有数据(文档内容)。

你能建议吗?

【问题讨论】:

  • 回声 $doc[0]; // TEST1 和 TEST2
  • 你检查过上面例子打印的 TEST1 吗?它没有获取和打印 TEST1。请检查它没有打印 TEST1。
  • 我正在使用 PHP 5.6.3 并且输出没有按照您上面的链接出现。您的工具在 PHP 5.5.14 上运行代码 :(

标签: php xml xpath


【解决方案1】:

我不能 100% 确定为什么你的 for-each 不起作用,但请看一下来自 the document page 的示例:

while(list( , $node) = each($result)) {
    echo '/a/b/c: ',$node,"\n";
}

并将其应用于您的代码:

$result = $stk->xpath('/TOPTag/Order/doc');
while(list( , $node) = each($result)) {
{
    echo "<pre>";
    print_r($node);
    echo "</pre>";
}

或者,这也可能有效(未经测试):

foreach($stk->xpath('/TOPTag/Order/doc') as $doc)
{
    echo "<pre>";
    print_r($doc->asXML());
    echo "</pre>";
}

【讨论】:

    猜你喜欢
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多