2016-10-18 2 views

ответ

0

Я повысить битовую ваш образец XML и загрузить его в строку, так что вы можете увидеть эффект выражения XPath применяется. Также обратите внимание, что вам необходимо зарегистрировать все пространства имен, используемые в XML-файле. Префиксы не должны совпадать с xml, но зарегистрированные префиксы - это те, которые вам нужно использовать в вашем выражении xpath.

<?php 
$string = <<<XML 
<root xmlns:saml="http://example.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<saml:Attribute Name="Role"> 
    <saml:AttributeValue xsi:type="xs:string">Master</saml:AttributeValue> 
    <saml:AttributeValue xsi:type="xs:string">Student1</saml:AttributeValue> 
</saml:Attribute> 
<saml:Attribute Name="Unknown"> 
    <saml:AttributeValue xsi:type="xs:string">Zero</saml:AttributeValue> 
    <saml:AttributeValue xsi:type="xs:string">One</saml:AttributeValue> 
</saml:Attribute> 
<saml:Attribute Name="Role"> 
    <saml:AttributeValue xsi:type="xs:string">Master</saml:AttributeValue> 
    <saml:AttributeValue xsi:type="xs:string">Student2</saml:AttributeValue> 
</saml:Attribute> 
</root> 
XML; 

$xml = new SimpleXMLElement($string); 
$xml->registerXPathNamespace('a','http://www.w3.org/2001/XMLSchema'); 
$xml->registerXPathNamespace('b','http://www.w3.org/2001/XMLSchema-instance'); 
$xml->registerXPathNamespace('s','http://example.org'); 

$result = $xml->xpath('//s:Attribute[@Name="Role"]/s:AttributeValue[2]'); 

foreach ($result as $a) 
{ 
print $a . "\n"; 
} 

?> 
Смежные вопросы