我是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
通常使用->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;
}
样本输出
使用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或标量值,具体取决于表达式。
表达式:
选择"体育内容代码"元素节点
//sports-content-code
具有"代码类型"属性的节点是季节
//sports-content-code[@code-type="season"]
获取"代码键"属性节点
//sports-content-code[@code-type="season"]/@code-key
将节点列表强制转换为返回第一节点的文本内容的字符串
string(//sports-content-code[@code-type="season"]/@code-key)