获取XML子节点/PHP XPATH的值

获取XML子节点/PHP XPATH的值,php,xml,xpath,Php,Xml,Xpath,我无法获取所选“项”的“qt”子节点的值 XML 我试过这两种方法,但似乎不起作用 $qt=$node->qt; 错误消息 致命错误:未捕获错误:调用第12行C:\wamp64\www\test\test.php中未定义的方法DomeElement::children() $qt=$node->children(0)->getName; 错误:在第12行的C:\wamp64\www\test\test.php中调用未定义的方法DomeElement::children()

我无法获取所选“项”的“qt”子节点的值

XML

我试过这两种方法,但似乎不起作用

$qt=$node->qt;
错误消息

致命错误:未捕获错误:调用第12行C:\wamp64\www\test\test.php中未定义的方法DomeElement::children()

$qt=$node->children(0)->getName;
错误:在第12行的C:\wamp64\www\test\test.php中调用未定义的方法DomeElement::children()

$qt=$node->children(0)->getName;
错误消息


注意:在C:\wamp64\www\test\test.php的第11行中,未定义的属性:domeElement::$qt。您可以扩展xpath查询以获取添加到其中的qt元素,然后获取

输出

101
另一个选项是循环子节点并检查节点名

foreach($xpath->query("//cart/item[id='$id']") as $node) {
    foreach($node->childNodes as $child) {
        if ($child->nodeName === "qt") {
            echo $child->nodeValue;
        }
    }    
}

您可以扩展xpath查询以获取qt元素,将
/qt
添加到该元素中,然后获取

输出

101
另一个选项是循环子节点并检查节点名

foreach($xpath->query("//cart/item[id='$id']") as $node) {
    foreach($node->childNodes as $child) {
        if ($child->nodeName === "qt") {
            echo $child->nodeValue;
        }
    }    
}

如果使用
DOMXpath::evaluate()
,则可以在Xpath表达式中使用字符串强制转换来获取节点的内容

foreach($xpath->evaluate("/cart/item[id='$id']") as $item) {
    var_dump($xpath->evaluate('string(qt)', $item));
}
或者让表达式在
qt
元素上迭代并读取
DOMNode::$textContent

foreach ($xpath->evaluate("/cart/item[id='$id']/qt") as $qt) {
    var_dump($qt->textContent);
}
或者,如果这里只有一个匹配节点,则使用字符串typecast在没有循环的情况下获取值:

var_dump($xpath->evaluate("string(/cart/item[id='$id']/qt)");

如果使用
DOMXpath::evaluate()
,则可以在Xpath表达式中使用字符串强制转换来获取节点的内容

foreach($xpath->evaluate("/cart/item[id='$id']") as $item) {
    var_dump($xpath->evaluate('string(qt)', $item));
}
或者让表达式在
qt
元素上迭代并读取
DOMNode::$textContent

foreach ($xpath->evaluate("/cart/item[id='$id']/qt") as $qt) {
    var_dump($qt->textContent);
}
或者,如果这里只有一个匹配节点,则使用字符串typecast在没有循环的情况下获取值:

var_dump($xpath->evaluate("string(/cart/item[id='$id']/qt)");

您有权更改XML还是必须使用提供的模式?欢迎使用StackOverflow。请编辑您的问题并描述“似乎不起作用”的含义。您是否收到错误消息(消息是什么)?输出是否意外(预期输出是什么)?您可以在该部分找到更多提示。您是否有权更改XML或必须使用提供的模式?欢迎使用StackOverflow。请编辑您的问题并描述“似乎不起作用”的含义。您是否收到错误消息(消息是什么)?输出是否意外(预期输出是什么)?您可以在该部分找到更多提示。