php-如何检查XML元素中是否有文本
:)假设我有这样的代码:php-如何检查XML元素中是否有文本,php,xml,Php,Xml,:)假设我有这样的代码: <sample number="1">TEXT</sample> 您需要将元素类型转换为字符串,然后检查它是否为空。 下面是一个简单的例子: $test = simplexml_load_string("<test><elem test='12'><sub /><sub /></elem><elem test='12'>hi</elem><elem tes
<sample number="1">TEXT</sample>
您需要将元素类型转换为字符串,然后检查它是否为空。 下面是一个简单的例子:
$test = simplexml_load_string("<test><elem test='12'><sub /><sub /></elem><elem test='12'>hi</elem><elem test='9' /><elem /></test>");
foreach($test as $elem){
echo "\n";
var_dump($elem);
if((string)$elem == '' && $elem->count() == 0)
echo 'Empty';
else
echo 'Full';
}
为什么准确了解用户如何编写语法很重要?是否要拒绝
?这不是答案,但。。。出于迂腐的语义原因,想要检测到这一点通常是错误的。只要以任何[有效]形式解析XML,处理数据,然后继续。不,我想拒绝
。从sample
中检索数据是因为,这些数据包含指向IMG的链接,当它自动关闭->没有IMG时,站点看起来很难看。我想处理这个问题。@CappY:那么你只想确定元素中是否有文本?这对我来说不是一个干净的解决方案,在花了1个小时搜索更干净的解决方案后,我发现这种方法是有效的:if((string)$xml->sample!=NULL)
但是谢谢你的回答。:)我不知道这怎么会更干净。您正在将某个内容键入字符串,然后将其与非字符串的内容进行比较。当你做一个而不是一个!==。php将NULL“转换”为“”。所以基本上,你做的和我一样,只是你只检查他们的文本内容,而不是他们的子元素。@FMaz008的答案对我来说很好,我看不出有什么不清楚的地方。此外,您的建议(字符串转换,然后与null
)没有任何意义,并且具有误导性,因为字符串转换永远不会导致null
。
$content = @file_get_contents($url);
$xml = new SimpleXMLElement($content);
$test = simplexml_load_string("<test><elem test='12'><sub /><sub /></elem><elem test='12'>hi</elem><elem test='9' /><elem /></test>");
foreach($test as $elem){
echo "\n";
var_dump($elem);
if((string)$elem == '' && $elem->count() == 0)
echo 'Empty';
else
echo 'Full';
}
object(SimpleXMLElement)#3 (2) {
["@attributes"]=>
array(1) {
["test"]=>
string(2) "12"
}
["sub"]=>
array(2) {
[0]=>
object(SimpleXMLElement)#4 (0) {
}
[1]=>
object(SimpleXMLElement)#5 (0) {
}
}
}
Full
object(SimpleXMLElement)#5 (2) {
["@attributes"]=>
array(1) {
["test"]=>
string(2) "12"
}
[0]=>
string(2) "hi"
}
Full
object(SimpleXMLElement)#3 (1) {
["@attributes"]=>
array(1) {
["test"]=>
string(1) "9"
}
}
Empty
object(SimpleXMLElement)#5 (0) {
}
Empty