如何在Laravel的Orchestral XMLParser中获取XML内部文本?
如何用Orchestral XMLParser获取XML内部文本?
嘿,我来帮你搞定这个XML解析的问题!首先看一下你的XML结构,里面有一个带code属性的course元素,还有两个带lang属性的title元素,每个都有自己的文本内容。你已经用XmlParser::extract()加载了XML,接下来只要调整一下parse方法的规则,就能轻松拿到内部文本啦。
先看你的XML结构:
Utmattning Fatigue
正确的解析规则写法:
你需要用value关键字来获取元素的内部文本。如果想把多个title整理成方便使用的结构,有两种实用方式:
方式1:获取包含语言和文本的数组列表
如果你希望保留每个title的完整信息(lang属性+文本内容),可以这样写:
$file = file_get_contents('file.xml'); $xml = XmlParser::extract($file); $array = $xml->parse([ 'code' => ['uses' => '::code'], // 提取course元素的code属性 'titles' => ['uses' => 'title[::lang, value]'] // 提取每个title的lang属性和内部文本 ]);
这样得到的$array['titles']会是一个数组,每个元素都是包含语言和文本的关联数组:
Array ( [code] => ABC [titles] => Array ( [0] => Array ( [lang] => sv [value] => Utmattning ) [1] => Array ( [lang] => en [value] => Fatigue ) ) )
方式2:整理成语言为键、文本为值的键值对
如果想直接按语言快速访问文本(比如$array['titles']['sv']),可以用=>key把lang属性设为数组的键:
$array = $xml->parse([ 'code' => ['uses' => '::code'], 'titles' => ['uses' => 'title[::lang=>key, value]'] ]);
这次的输出会更简洁直观:
Array ( [code] => ABC [titles] => Array ( [sv] => Utmattning [en] => Fatigue ) )
关键知识点:
value:专门用来获取XML元素的内部文本内容::lang:表示当前元素(这里是title)的lang属性,两个冒号代表当前节点的属性=>key:把指定的属性值作为数组的键,让多语言数据更易访问
内容的提问来源于stack exchange,提问作者Finnepinnen
相关产品推荐
相关产品推荐

