0

我正在尝试读取结构如下的 xml 文件

<dictionary>
<head>

<DNUM />
<DEF value="definition1" />
<EXAMPLE value="example of 1" />
<EXAMPLE value="example of 1" />

<DNUM />
<DEF value="definition2" />
<EXAMPLE value="example of 2" />
<EXAMPLE value="example of 2" />
<EXAMPLE value="example of 2" />
<EXAMPLE value="example of 2" />

<DNUM />
<DEF value="definition3" />
<EXAMPLE value="example of 3" />


</head>
</ dictionary>

使用类似下面的代码,我可以阅读“head”标签中的所有定义或示例

 $result = $xml->xpath('//dictionary/head');
 while(list( , $node) = each($result)) {
   foreach($node->DEF as $def){
        echo  $def["value"]."<br>\n";
   }
 }

但我想获得该定义的每个定义和示例。我认为 DNUM 标签可以用于此,但由于它没有单独的打开和关闭,我无法找到我想要的结果。

4

4 回答 4

0

由于您的 XML 结构不是分层的,因此您只能数数。例如以下DNUM元素的数量:

$name     = 'DNUM';
$elements = $xml->xpath("//$name");
$count    = count($elements);
foreach ($elements as $index => $element) {
    $count--;
    echo "Iteration $index\n";
    foreach ($element->xpath("following-sibling::*[count(./following-sibling::$name) = $count]") as $following) {
        echo $following->asXML(), "\n";
    }
    echo "\n";
}

示例输出:

Iteration 0
<DEF value="definition1"/>
<EXAMPLE value="example of 1"/>
<EXAMPLE value="example of 1"/>

Iteration 1
<DEF value="definition2"/>
<EXAMPLE value="example of 2"/>
<EXAMPLE value="example of 2"/>
<EXAMPLE value="example of 2"/>
<EXAMPLE value="example of 2"/>

Iteration 2
<DEF value="definition3"/>
<EXAMPLE value="example of 3"/>
于 2013-02-15T23:40:08.827 回答
0

I solved problem in this way.

$result = $xml->xpath('//dictionary/headword/*[name()="DEF" or name()="EXAMPLE"]');
 foreach($result  as $res){
     echo $res["value"]."<br>";
 }
于 2013-02-15T21:25:10.140 回答
0

为什么不使用 SimpleXMLElement?

$sxe = new SimpleXMLElement($xml);

$def = $sxe->head->dictionary->DEF->attributes(); //you can foreach this
//or
$def = $sxe['head']['dictionary']['DEF']->attributes(); //you can foreach this

您可以以类似的方式获取示例。SXE 可以像对象或数组一样使用,并且可以通过 foreach 进行迭代。

我个人认为 SimpleXMLElement 是使用 XML 和 PHP 最简单的方法。

进一步阅读: http ://www.php.net/manual/en/class.simplexmlelement.php

于 2013-02-15T19:35:36.467 回答
0

我不确定我是否理解您的问题,但如果您需要查找 DEF 和该 DEF 的示例,它可能就像

    $result = $xml->xpath('//dictionary/head/DEF');
 while(list( , $node) = each($result)) {
   foreach($node->EXAMPLE as $example){
        echo  $example["value"]."<br>\n";
   }
 }
于 2013-02-15T19:26:03.457 回答