使用多名称空间通过PHP从XML获取值

使用多名称空间通过PHP从XML获取值,php,xml,Php,Xml,我试图从一个使用3个名称空间的XML文件中读取数据,并努力从中读取值 <?xml version ="1.0"?> <Invoice xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns="

我试图从一个使用3个名称空间的XML文件中读取数据,并努力从中读取值

<?xml version ="1.0"?> 
<Invoice xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"

<cac:PartyName>
<cbc:Name>John Doe</cbc:Name>
</cac:PartyName>

registerXPathNamespace('cac',
'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-
2');
foreach($xml->xpath('//cac:PartyName')作为$PartyName)
{
打印($PartyName->xpath('//cbc:Name');
}
?>

我只注册了两个名称空间,因为它们是XML文件中唯一使用的名称空间。(CBC和CAC)。我从这个数组中得到整个数组的结果,但我有点希望我的输出是“John Doe”

只需将
simplexmlement
转换为字符串,即可访问该元素的文本内容:

echo (string) $PartyName->xpath('//cbc:Name')[0];
请注意,在行的末尾添加了
[0]
xpath
方法返回一个对象数组,我们只需要引用第一个


请参见

,具体取决于您拥有的其他数据量,以及具有相同名称的其他元素在文档中的位置取决于XPath的具体程度

foreach($xml->xpath('//cac:PartyName') as $PartyName)
{
    echo (string)$PartyName->children('cbc', true)->Name.PHP_EOL;
}
上面的意思是它将是
元素下的所有数据,然后您可以选择所需的位

foreach($xml->xpath('//cac:PartyName/cbc:Name') as $PartyName)
{
    echo (string)$PartyName.PHP_EOL;
}
这将其限制为仅在PartyName元素下直接挑出Name元素,以防Name元素可能存在于其他位置

foreach($xml->xpath('//cac:PartyName/cbc:Name') as $PartyName)
{
    echo (string)$PartyName.PHP_EOL;
}