Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从XML中搜索特定节点值_Php_Xml_Xpath_Domdocument - Fatal编程技术网

Php 从XML中搜索特定节点值

Php 从XML中搜索特定节点值,php,xml,xpath,domdocument,Php,Xml,Xpath,Domdocument,这是我的PHP/XML代码。我只想从以下位置搜索特定的$searchterm: $doc = new DOMDocument; $doc->load('authentication.xml'); $xpath = new DOMXPath($doc); $searchTerm = "N0A097016646"; $lineNo = 0; foreach ($xpath->query('//device/following::comment()') as $comment){

这是我的PHP/XML代码。我只想从以下位置搜索特定的
$searchterm

$doc = new DOMDocument;
$doc->load('authentication.xml');

$xpath = new DOMXPath($doc);

$searchTerm = "N0A097016646";

$lineNo = 0;
foreach ($xpath->query('//device/following::comment()') as $comment){
    $serial= $xpath->query('//device', $comment)->item($lineNo)->textContent;

    echo "Line number: ".$comment->getLineNo()." Device number: ".$serial." Comented number: ".$comment->textContent."<br>";

    $lineNo++;
}
$doc=新文档;
$doc->load('authentication.xml');
$xpath=新的DOMXPath($doc);
$searchTerm=“N0A097016646”;
$lineNo=0;
foreach($xpath->query('//device/following::comment()')作为$comment){
$serial=$xpath->query('//device',$comment)->item($lineNo)->textContent;
回显“行号:.$comment->getLineNo()”设备号:.$serial.。回显编号:.$comment->textContent.
”; $lineNo++; }

我应该将
$searchTerm
变量放在哪里来搜索特定节点?

您的问题是,您没有使用
$searchTerm

=
(相等)一起使用

代码:

$searchTerm=“N0A097016646”;
foreach($xpath->query(//device[text()='$searchTerm']/following::comment())作为$comment){
回显“行号:”.$comment->getLineNo()。
“。 设备编号:“.$searchTerm.
”。 “输入号码:”.$comment->textContent.“
”; }

在xpath查询中使用
$searchTerm
,但不使用它。关于
contains()
的研究我尝试过,但没有成功:$serial=$xpath->query(“//device[contains(“$searchTerm.”)”,$comment)->item($lineNo)->textContent;您是否有可以使用的示例xml?很难猜到这个endHi,是的,而且我不需要使用$lineNo变量。但是当我删除时,它会显示一些错误。我可以使用getLineNo()函数获取行号,这是我的示例xml文件J0A0AM049303 H0A0AG014628 N0A097016646 Hi,但根据$searchTerm,我只需要1个结果;但这再次显示了一切。请帮助解决此问题这是我的xml:;J0A0AM049303 H0A0AG014628 N0A097016646@user3619039当然我很高兴helped@user3619039如果这是用户输入,也要小心xpath注入
text() = '$searchTerm'
$searchTerm = "N0A097016646";

foreach ($xpath->query("//device[text() = '$searchTerm']/following::comment()") as $comment){
    echo "Line number: ".$comment->getLineNo(). '<br/>'.
    " Device number: ".$searchTerm.'<br/>'.
    " Comented number: ". $comment->textContent."<hr>";
}