在XML中提取一个值

时间:2014-10-10 04:28:56

标签: php xml simplexml

我不熟悉在PHP中处理和读取XML字符串

我有这样的XML

<sports-metadata>
  <sports-content-codes>
    <sports-content-code code-type="sport" code-key="15027000" code-name="Golf"/>
    <sports-content-code code-type="league" code-key="l.pga.com" code-name="Professional Golf Association"/>
    <sports-content-code code-type="season-type" code-key="regular"/>
    <sports-content-code code-type="season" code-key="2015"/>
    <sports-content-code code-type="priority" code-key="normal"/>
  </sports-content-codes>
</sports-metadata>

我已通过$xml=simplexml_load_file()

阅读了XML

我可以通过$xml->{'sports-content-codes'}->{'sports-content-code'}

访问此XML部分

在体育内容代码中

我想访问/检索code-type="season"

所在的代码键值

我如何在PHP中执行此操作?

谢谢大家。

- Ed

2 个答案:

答案 0 :(得分:2)

通常使用->attributes()方法获取这些属性:

foreach($xml->{'sports-content-codes'}->{'sports-content-code'} as $content_code) {
    $attr = $content_code->attributes();
    $code_type = (string) $attr->{'code-type'};
    echo $code_type;
}

Sample Output

答案 1 :(得分:1)

使用Xpath ...

...使用SimpleXml:

$element = simplexml_load_string($xml);
$array = $element->xpath(
  '//sports-content-code[@code-type="season"]'
);
var_dump(
  (string)$array[0]['code-key']
);

...或DOM:

$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);
var_dump(
  $xpath->evaluate(
    'string(//sports-content-code[@code-type="season"]/@code-key)'
  )
);

输出(两者):

string(4) "2015"

Xpath是DOM的表达式语言(想想DBMS的SQL)。 SimpleXMLElement::xpath()支持其中一些(仅返回元素或属性节点的表达式)。结果将始终是SimpleXMLElement对象的数组。 DOMXpath::evaluate()支持完整的Xpath 1.0。结果是DOMNodelist或标量值,具体取决于表达式。

表达式:

选择&#34;体育内容代码&#34;元素节点

//sports-content-code

使用&#34;代码类型&#34;属性节点是季节

//sports-content-code[@code-type="season"]

获取&#34;代码密钥&#34;属性节点

//sports-content-code[@code-type="season"]/@code-key

将节点列表强制转换为返回第一个节点的文本内容的字符串

string(//sports-content-code[@code-type="season"]/@code-key)