PHP/XML-检查是否设置了节点

PHP/XML-检查是否设置了节点,php,xml,Php,Xml,我有一个如下结构的XML文档: <produkter> <produkt> <forhandler></forhandler> <produktnavn></produktnavn> and so on... </produkt> </produkter> $produktnavn = utf8_decode($xmlObject-&g

我有一个如下结构的XML文档:

<produkter>
    <produkt>
        <forhandler></forhandler>
        <produktnavn></produktnavn>
        and so on...
    </produkt>
</produkter>
$produktnavn = utf8_decode($xmlObject->item($i)->getElementsByTagName('produktnavn')->item(0)->childNodes->item(0)->nodeValue);
现在,我想做一个检查,看看XML文档中是否存在该节点

例如。。。我只想在实际存在名为“produktnavn”的节点时执行上述操作

我正在尝试:

if (isset($xmlObject->item($i)->forhandler)) {
但这似乎不起作用

I做错了什么?

您可以使用with并检查xpath表达式的长度

例如:

$source = <<<SOURCE
<produkter>
    <produkt>
        <forhandler></forhandler>
        <produktnavn></produktnavn>
    </produkt>
</produkter>
SOURCE;

$xmlObject = new DOMDocument;
$xmlObject->loadXML($source);
$xpath = new DOMXpath($xmlObject);
$elements = $xpath->query('//produktnavn');
if ($elements->length > 0) {
    // present
}
$source=length>0){
//出席
}
的结果总是一个;该类有一个成员
长度
,描述如下:

列表中的节点数。有效子节点索引的范围为0到长度-1(包括长度-1)

因此,要检查列表中是否至少有一项,请检查
length
是否为
>0

$produktnavn_nodes = $xmlObject->item($i)->getElementsByTagName('produktnavn');
if ( $produktnavn_nodes->length > 0 ) {
    $produktnavn = utf8_decode($produktnavn_nodes->item(0)->childNodes->item(0)->nodeValue);
    // ... do something with $produktnavn
}

请澄清你所说的“似乎不起作用”是什么意思。你希望看到什么?你看到了什么?不相关的提示/问题:你是否明确要求将文本转换为ISO 8859-1编码?如果不是,则不是您想要的功能。如果您已经理解了这一点,我很抱歉,但我已经看到很多滥用该函数的情况,它们是某种魔法“让我的Unicode变得更好”,而事实并非如此。如果(isset($xmlObject->item($I)->forhandler)){$forhandler=utf8_decode($xmlObject->item($I)->getElementsByTagName('forhandler')->item(0)->childNodes->item(0)->nodeValue)}其他{$forhandler=“Unknown”}当我打印$forhandler时,它会显示“Unknown”。IMSoP:是的,我使用的是斯堪的纳维亚字符,需要转换为ISO 8859-1。