私はこのsimplexml結果オブジェクトを持っています:
object(SimpleXMLElement)#207 (2) {
["@attributes"]=>
array(1) {
["version"]=>
string(1) "1"
}
["weather"]=>
object(SimpleXMLElement)#206 (2) {
["@attributes"]=>
array(1) {
["section"]=>
string(1) "0"
}
["problem_cause"]=>
object(SimpleXMLElement)#94 (1) {
["@attributes"]=>
array(1) {
["data"]=>
string(0) ""
}
}
}
}
ノード「problem_cause」が存在するかどうかを確認する必要があります。空であっても、結果はエラーになります。 phpマニュアルで、私は自分のニーズに合わせて変更した次のphpコードを見つけました。
function xml_child_exists($xml, $childpath)
{
$result = $xml->xpath($childpath);
if (count($result)) {
return true;
} else {
return false;
}
}
if(xml_child_exists($xml, 'THE_PATH')) //error
{
return false;
}
return $xml;
ノードが存在するかどうかを確認するために、xpathクエリ「THE_PATH」の代わりに何を配置すればよいかわかりません。それとも、simplexmlオブジェクトをdomに変換する方が良いですか?
単純なように聞こえます isset() この問題を解決します。
<?php
$s = new SimpleXMLElement('<foo version="1">
<weather section="0" />
<problem_cause data="" />
</foo>');
// var_dump($s) produces the same output as in the question, except for the object id numbers.
echo isset($s->problem_cause) ? '+' : '-';
$s = new SimpleXMLElement('<foo version="1">
<weather section="0" />
</foo>');
echo isset($s->problem_cause) ? '+' : '-';
印刷+-
エラー/警告メッセージなし。
投稿したコードを使用すると、この例は、problem_causeノードを任意の深さで見つけるために機能するはずです。
function xml_child_exists($xml, $childpath)
{
$result = $xml->xpath($childpath);
return (bool) (count($result));
}
if(xml_child_exists($xml, '//problem_cause'))
{
echo 'found';
}
else
{
echo 'not found';
}
これを試して:
function xml_child_exists($xml, $childpath)
{
$result = $xml->xpath($childpath);
if(!empty($result ))
{
echo 'the node is available';
}
else
{
echo 'the node is not available';
}
}
これがお役に立てば幸いです。
プット*/problem_cause
。