使用php获取XML中属性的第二个值

时间:2016-10-18 15:19:22

标签: php xml xpath

我如何只获取属性“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>

1 个答案:

答案 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";
}

?>