我正在使用連接到基於遠程XML的API的PHP和XPath。來自服務器的示例響應如下所示。如何使用XPath檢查是否存在<Success />節點
<OTA_PingRS>
<Success />
<EchoData>This is some test data</EchoData>
</OTA_PingRS>
你可以看到有沒有開始標記<Success>
讓我怎麼搜索的<Success />
使用XPath的所有腦幹?
感謝 西蒙
我正在使用連接到基於遠程XML的API的PHP和XPath。來自服務器的示例響應如下所示。如何使用XPath檢查是否存在<Success />節點
<OTA_PingRS>
<Success />
<EchoData>This is some test data</EchoData>
</OTA_PingRS>
你可以看到有沒有開始標記<Success>
讓我怎麼搜索的<Success />
使用XPath的所有腦幹?
感謝 西蒙
的<Success />
元件爲empty element,這意味着它沒有價值。它是開始和結束標記。
您可以test for existence of nodes with the XPath function boolean()
布爾函數將其參數轉換爲布爾如下:如果,如果它是唯一沒有正面或負面的
- 一些是真正的零也不NaN的
- 一個節點集是真的當且僅當它是非空的時
- 一個字符串是真當且僅當它的長度非零時
- 比四種基本類型以外的其他類型的對象轉換爲一個布爾值的方式,依賴於這種類型的
要做到這一點與DOMXPath
您需要使用DOMXPath::evaluate()
方法,因爲它會返回一個類型化的結果,在這種情況下,boolean
:
$xml = <<< XML
<OTA_PingRS>
<Success />
<EchoData>This is some test data</EchoData>
</OTA_PingRS>
XML;
$dom = new DOMDocument;
$dom->loadXml($xml);
$xpath = new DOMXPath($dom);
$successNodeExists = $xpath->evaluate('boolean(/OTA_PingRS/Success)');
var_dump($successNodeExists); // true
當然,你也可以只查詢/OTA_PingRS/Success
,看看是否有結果返回DOMNodeList
:
$xml = <<< XML
<OTA_PingRS>
<Success />
<EchoData>This is some test data</EchoData>
</OTA_PingRS>
XML;
$dom = new DOMDocument;
$dom->loadXml($xml);
$xpath = new DOMXPath($dom);
$successNodeList = $xpath->evaluate('/OTA_PingRS/Success');
var_dump($successNodeList->length);
您還可以使用SimpleXML:
$xml = <<< XML
<OTA_PingRS>
<Success />
<EchoData>This is some test data</EchoData>
</OTA_PingRS>
XML;
$nodeCount = count(simplexml_load_string($xml)->xpath('/OTA_PingRS/Success'));
var_dump($nodeCount); // 1
謝謝您的詳細回覆。非常感激。 – PrestonDocks
語法:
<Success />
<Success></Success>
爲了測試<Success />
存在,您只需使用這樣的路徑:
//OTA_PingRS/Success[1]
您現在可以測試用友結果爲空。如果是,則<Success />
元素不存在。
感謝您的回覆,這有助於我更好地理解xpath和simplexml如何處理XML數據。 – PrestonDocks
使用函數來檢查要檢查存在的xpath的布爾值。
正常的方式,你嘗試了什麼? – Musa