使用 SimpleXMLParser 获取嵌套节点值
Get nested node value with SimpleXMLParser
我有一个简单的 XML 响应,我正在接收一个变量($response):
<tsresponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://tableau.com/api http://tableau.com/api/ts-api-3.7.xsd">
<pagination pagenumber="1" pagesize="100" totalavailable="1">
<users>
<user externalauthuserid="" id="abcd1234-hijk-lmno-1234-abcd9876" name="TestUsername" siterole="Explorer">
</user>
</users>
</pagination>
</tsresponse>
我正在尝试检索“id”的值。
$xml=simplexml_load_string($response) or die("Error: Cannot create object");
$tableauuserid = $xml->pagination->users[0]->user['id'];
echo "The (existing) Tableau User ID is: ". $tableauuserid;
(大部分)相同的格式适用于我在类似响应中检索 id 值的级别 - 除了那时我只处理“用户”而不是“分页->用户->用户”。当前变量 $tableauuserid 为空。
关于如何检索 id 的值有什么想法吗?
查找任何 <user>
元素的一种简单方法是使用 XPath。唯一有点复杂的是在基本元素上定义的默认命名空间。要解决这个问题,您需要注册该名称空间(使用 registerXPathNamespace()
),然后使用前缀作为名称的一部分。
调用xpath()
会return一个匹配节点的列表,所以需要[0]
才能使用第一个...
$xml->registerXPathNamespace("d", "http://tableau.com/api");
$user = $xml->xpath("//d:user[@id]");
$tableauuserid = $user[0]['id'];
我有一个简单的 XML 响应,我正在接收一个变量($response):
<tsresponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://tableau.com/api http://tableau.com/api/ts-api-3.7.xsd">
<pagination pagenumber="1" pagesize="100" totalavailable="1">
<users>
<user externalauthuserid="" id="abcd1234-hijk-lmno-1234-abcd9876" name="TestUsername" siterole="Explorer">
</user>
</users>
</pagination>
</tsresponse>
我正在尝试检索“id”的值。
$xml=simplexml_load_string($response) or die("Error: Cannot create object");
$tableauuserid = $xml->pagination->users[0]->user['id'];
echo "The (existing) Tableau User ID is: ". $tableauuserid;
(大部分)相同的格式适用于我在类似响应中检索 id 值的级别 - 除了那时我只处理“用户”而不是“分页->用户->用户”。当前变量 $tableauuserid 为空。
关于如何检索 id 的值有什么想法吗?
查找任何 <user>
元素的一种简单方法是使用 XPath。唯一有点复杂的是在基本元素上定义的默认命名空间。要解决这个问题,您需要注册该名称空间(使用 registerXPathNamespace()
),然后使用前缀作为名称的一部分。
调用xpath()
会return一个匹配节点的列表,所以需要[0]
才能使用第一个...
$xml->registerXPathNamespace("d", "http://tableau.com/api");
$user = $xml->xpath("//d:user[@id]");
$tableauuserid = $user[0]['id'];