You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:03:09