【问题标题】:return raw XML from xpath query in PHP? [duplicate]从 PHP 中的 xpath 查询返回原始 XML? [复制]
【发布时间】:2013-03-11 16:06:39
【问题描述】:

我正在寻找 xpath 并从 PHP 中的文件中提取原始 XML,但我不希望将结果解析为数组。我只是想从原始文档中返回一个子集。

我的原始文档结构如下:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <row id="1">
        <child1>value1</child1>
        <child2>value1</child2>
        <child3>value1</child3>
    </row>
    <row id="2">
        <child1>value1</child1>
        <child2>value1</child2>
        <child3>value1</child3>
    </row>
</root>

我想要做的就是能够 xpath 进入 /root/row[@id="1"] 并返回:

<?xml version="1.0" encoding="utf-8"?>
<row id="1">
    <child1>value1</child1>
    <child2>value1</child2>
    <child3>value1</child3>
</row>

解决此问题的最佳方法是什么?

【问题讨论】:

  • 您正在寻找 simplexml

标签: php xml xpath


【解决方案1】:
$doc = new DOMDocument();
$doc->loadXML('<root>...</root>'); // or $doc->load($file) if loading from file
$xpath = new DOMXpath($doc);
$elements = $xpath->query("/root/row[@id='1']");
if ($elements) {
    foreach ($elements as $item) {
        echo $doc->saveXML($item), "\n";
    }
 }

感谢@fab 的评论。我忘了that

【讨论】:

  • 这会返回整个原始文档,而不是 XPATH 的结果。
  • 这是一个很好的起点,但您需要从原始文件生成另一个 XML 文件。
  • 不,您只需将节点作为参数传递:$doc-&gt;saveXML($elements-&gt;item(0));
  • 是的,这正是我想要的,谢谢!我所缺少的只是 $elements->item(0)。
【解决方案2】:

试着放一个这样的标题,

header('Content-Type: application/xml; charset=UTF-8');

【讨论】:

    猜你喜欢
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多