如何在管弦乐xml解析器中获取内部文本?

时间:2018-04-12 17:08:49

标签: php laravel

您好我有一个xml片段,我想在Laravel中使用Orchestral XMLParser进行解析。

<?xml version="1.0" encoding="UTF-8"?>
<course code="ABC">
   <title lang="sv">Utmattning</title>
   <title lang="en">Fatigue</title>
</course>

以下代码用于尝试解析它

$file = file_get_contents('file.xml');

$xml = XmlParser::extract($file);

$array = $xml->parse([
  'code' => ['uses' => '::code'],
  'title' => ['uses' => 'title[::lang>locale, value>name]'],
)];

这就是我得到的

[
  [code] => ABC
  [title] =>
  [
    [locale] => sv
    [name] => 
  ],
  [
    [locale] => en
    [name] => 
  ]
]

但我想得到

[
  [code] => ABC
  [title] =>
  [
    [locale] => sv
    [name] => Utmattning
  ],
  [
    [locale] => en
    [name] => Fatigure
  ]
]

如何替换“value”以获取元素标题的内部文本?

2 个答案:

答案 0 :(得分:0)

尝试title[::lang=@]

请参阅https://github.com/laravie/parser/blob/master/tests/Xml/DocumentTest.php#L331-L356

当您执行value>name时,预计会<title><value>Content</value></title>

答案 1 :(得分:0)

我通过在结构中添加一个名为“!”的新运算符来解决问题。它获取活动元素的内部文本。

https://github.com/laravie/parser/pull/15

也许不是最干净的解决方案,但它有效:)