我不熟悉在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->{'sports-content-codes'}->{'sports-content-code'}
在体育内容代码中
我想访问/检索code-type="season"
我如何在PHP中执行此操作?
谢谢大家。
- Ed
答案 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;
}
答案 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)