php和xml:找到一个xml节点,然后在php中使用它的值

时间:2014-01-03 21:06:48

标签: php xml xpath nodes

我的问题是我找不到在XML文档中查找节点的方法 这是它(users.xml):

<users>

    <user>
        <id>10</id>
        <username>User1</username>
    </user>
    <user>
        <id>22</id>
        <username>User2</username>
    </user>
    <user>
        <id>13</id>
        <username>User3</username>
    </user>
</users>

$_SESSION['username']中,我拥有当前登录用户的用户名。我想使用xpath或其他东西将已记录用户的ID(假设User2已记录)分配给变量$userID。有人可以帮助我,因为到目前为止我所得到的都是错误。

提前致谢!

2 个答案:

答案 0 :(得分:2)

使用DOMXpath :: evaluate()方法。

获取user元素:

/users/user

仅限特定的username子元素:

/users/user[username = "User2"]

找到的用户的id子元素:

/users/user[username = "User2"]/Id

首先将id元素转换为字符串

string(/users/user[username = "User2"]/Id)

$xml = <<<'XML'
<users>
    <user>
        <id>10</id>
        <username>User1</username>
    </user>
    <user>
        <id>22</id>
        <username>User2</username>
    </user>
    <user>
        <id>13</id>
        <username>User3</username>
    </user>
</users>
XML;

$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);

$userName = 'User2';
$userId = $xpath->evaluate('string(/users/user[username = "'.$userName.'"]/id)');

var_dump($userId);

输出

string(2) "22"

答案 1 :(得分:0)

我不知道这对你来说读取节点childes的内容是否有用,但是'是意大利语:

http://www.edinweb.altervista.org/2013/10/16/leggere-xml-con-simplexml/

编辑从链接中提取要点:

例如,如果您有以下XML文件books.xml(书籍列表):

<?xml version='1.0' ?>
<books>
  <book id="1">
     <title>La Divina Commedia</title>
     <author>Dante Alighieri</author>
</book>
<book id="2">
     <title>I Promessi Sposi</title>
     <author>Alessandro Manzoni</author>
</book>
<book id="3">
     <title>I Malavoglia</title>
     <author>Giovanni Verga</author>
</book>
</libri>

如您所见,这是一本书籍清单,每本书都有标题和作者。

使用Xpath方法,我们可以使用X33语言搜索XML文档,该语言是W3C标准。例如,要访问id = 2的书:

<?php
$xml=simplexml_load_file("books.xml");

$arr = $xml->xpath("/books/book[@id=2]");
//array that contains the information relating to the book with id=2
 print_r($arr);
?>

上面的链接还有其他一些例子 - 希望通过这一点翻译,您将能够理解那里提供的其他代码示例。