首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写xpath以查询php中的xml文件

如何编写xpath以查询php中的xml文件
EN

Stack Overflow用户
提问于 2019-11-26 13:34:59
回答 1查看 130关注 0票数 0

我有一个xml文件,我想从php page.Actually查询该文件,该文件包含用户名和用户密码。我想查询该文件,看看用户名是否匹配,password.Here是我的php页面代码:

代码语言:javascript
复制
<?php
$username=$_POST['username'];
$password=$_POST['password'];


$xml = simplexml_load_file('users.xml') or 
    die("error :cannot create object");
    print_r($xml);


$result = $xml->xpath("/user[username=".$username."] and //user[password=".$password."]");

foreach ($result as $node){
    echo $node->id;
    echo $node->username;
}

xml文件

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


<user>
<id>1</id>
<username>mygirl</username>
<password>mygirl1234</password>
<email>mygirl@hotmail.com</email>
</user>

例外情况

警告: SimpleXMLElement::xpath():在C:\Program (X86)\EasyPHP 17\eds\freshshop免费网站模板中的无效表达式

警告: SimpleXMLElement::xpath():xmlXPathEval:计算失败在C:\Program (X86)\EasyPHP 17\eds www\freshshop免费网站模板- Free -CSS.com\freshshop\接任Fullogin.php行

警告:在C:\Program (X86)\EasyPHP-Devserver-17\eds\freshshop免费网站模板- Free -CSS.com\freshshop\cerfullogin.php中为foreach()提供的参数无效

代码语言:javascript
复制
UPDATE
$xml = simplexml_load_file('users.xml') or 
die("error :cannot create object");

$username='neem88';
$pwd='dbhcasvc';
$query=sprintf('/users/user[ username="%s" and password="%s" ]', $username, 
$pwd );


libxml_use_internal_errors( true );
$dom=new DOMDocument();
$dom->validateOnParse=false;
$dom->recover=true;
$dom->strictErrorChecking=false;
$dom->loadXML( $xml );
$errors = libxml_get_errors();
libxml_clear_errors();

$xp=new DOMXPath( $dom );
$col=$xp->query( $query );

if( $col->length > 0 ){
foreach( $col as $node )echo $node->id;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-26 13:58:13

您与XPath表达式非常接近,但略有错误。您正在尝试匹配两个子元素,因此XPath查询应该在[ square braces ]中包含两个元素。

查询的形式如下:

代码语言:javascript
复制
//users/user[ username="X" and password="Y" ]

把所有的东西都放在一起

代码语言:javascript
复制
$strxml='<?xml version="1.0" encoding="utf-8"?>
<users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <user>
        <id>1</id>
        <username>mygirl</username>
        <password>mygirl1234</password>
        <email>mygirl@hotmail.com</email>
    </user>
    <user>
        <id>2</id>
        <username>mybanana</username>
        <password>myb4n4n4</password>
        <email>mybanana@hotmail.com</email>
    </user>
    <user>
        <id>3</id>
        <username>mytrumpet</username>
        <password>mytrumpet</password>
        <email>mytrumpet@hotmail.com</email>
    </user>
</users>';


$username='mybanana';
$pwd='myb4n4n4';

/* put both elements and values within square braces - combine with AND */
$query=sprintf('//users/user[ username="%s" and password="%s" ]', $username, $pwd );


libxml_use_internal_errors( true );
$dom=new DOMDocument;
$dom->validateOnParse=false;
$dom->recover=true;
$dom->strictErrorChecking=false;
$dom->loadXML( $strxml );
$errors = libxml_get_errors();
libxml_clear_errors();

$xp=new DOMXPath( $dom );
$col=$xp->query( $query );

if( $col->length > 0 ){
    foreach( $col as $node )echo $node->nodeValue;
}

这将输出

代码语言:javascript
复制
2 mybanana myb4n4n4 mybanana@hotmail.com

你应该能够很容易地适应simple_xml --我想.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59052162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档