我如何只获取属性“Role”的seconde值(在本例中为“Student”)?
<saml:Attribute Name="Role">
<saml:AttributeValue xsi:type="xs:string">Master</saml:AttributeValue>
<saml:AttributeValue xsi:type="xs:string">Student</saml:AttributeValue>
</saml:Attribute>
答案 0 :(得分: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";
}
?>