[英]How to get element xml using xpath php
我在使用xpath php獲取元素xml時遇到問題,我已經創建了一個php文件,以通過使用xpath php提取“屬性” xml。
我想要的是如何使用xpath提取xml中的每個元素。
的test.xml
<?xml version="1.0" encoding="UTF-8"?>
<InvoicingData>
<CreationDate> 2014-02-02 </CreationDate>
<OrderNumber> XXXX123 </OrderNumber>
<InvoiceDetails>
<InvoiceDetail>
<SalesCode> XX1A </SalesCode>
<SalesName> JohnDoe </SalesName>
</InvoiceDetail>
</InvoiceDetails>
</InvoicingData>
read.php
<?php
$doc = new DOMDocument();
$doc->loadXML(file_get_contents("test.xml"));
$xpath = new DOMXpath($doc);
$nodes = $xpath->query('//*');
$names = array();
foreach ($nodes as $node)
{
$names[] = $node->nodeName;
}
echo join(PHP_EOL, ($names));
?>
從上面的代碼中,它將像這樣打印:
CreationDate訂單號InvoiceDetails InvoiceDetail SalesCode SalesName
所以,問題是,如何獲取屬性內的元素, 基本上這就是我要打印的內容 :
2014-02-02 XXXX123 XX1A JohnDoe
您可以使用$node->textContent
來獲取節點(及其后代,如果有)的文本值。
針對您的第一條評論:
您沒有使用$node->textContent
。 嘗試這個:
$doc = new DOMDocument();
$doc->loadXML(file_get_contents("test.xml"));
$xpath = new DOMXpath($doc);
$nodes = $xpath->query('//*');
$names = array();
$values = array(); // created a separate array for the values
foreach ($nodes as $node)
{
$names[] = $node->nodeName;
$values[] = $node->textContent; // push to $values array
}
echo join(PHP_EOL, ($values));
但是,如果只希望在文本值是元素的直接子代時推送文本值,並且仍然希望收集所有節點名,則可以執行以下操作:
foreach ($nodes as $node)
{
$names[] = $node->nodeName;
// check that this node only contains one text node
if( $node->childNodes->length == 1 && $node->firstChild instanceof DOMText ) {
$values[] = $node->textContent;
}
}
echo join(PHP_EOL, ($values));
而且,如果您只關心直接包含文本值的節點,則可以執行以下操作:
// this XPath query only selects those nodes that directly contain non-whitespace text
$nodes = $xpath->query('//*[./text()[normalize-space()]]');
$values = array();
foreach ($nodes as $node)
{
// add nodeName as key
// (only works reliable of there's never a duplicate nodeName in your XML)
// and add textContent as value
$values[ $node->nodeName ] = trim( $node->textContent );
}
var_dump( $values );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.