PHP中的XML阅读器

时间:2015-01-05 11:05:30

标签: php

我有一个(n)XML文件:

<xml ..... >
- <tandlege_hansen>             // = dentist_hansen 
  <data var1 = "bla" var2="blabla" var3 ="blablabla" .... />
  <data var1 = "bla" var2="blabla" var3 ="blablabla" .... />
  <data var1 = "bla" var2="blabla" var3 ="blablabla" .... />
  .....
- <tandlege_hansen>

并在PHP部分中执行以下操作:

<?php

$reader = new XMLReader();

if (!$reader->open("data.xml")) 
{
    die("Failed to open 'data.xml'");
}
....
?>

a lot of HTML-code 

<?php
    while ($reader->read()) 
    {
        if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'data')
        {
          $var1 = $reader->getAttribute('var1');
          $var2 = $reader->getAttribute('var2');
          $var3 = $reader->getAttribute('var3');
          .....
          ?>
          another - lots of HTML-code incluing "echo ($var1 .. $var3); .." 

<?php
        }
    }

$reader->close();

?>

这很有效。

现在Dentist Hansen希望像这样更改XML文件:

<xml ..... >
- <tandlege_hansen>
  <week_01> 
  <data var1 = "bla" var2="blabla" var3 ="blablabla" .... />
  <data var1 = "bla" var2="blabla" var3 ="blablabla" .... />
  <data var1 = "bla" var2="blabla" var3 ="blablabla" .... />
  </week_01>    
 .....

// Numbers af lines (<data .. >) can be a random number between 1 and 64 independent of week_number (week_01).

  <week_52> 
  <data var1 = "bla" var2="blabla" var3 ="blablabla" .... />
  <data var1 = "bla" var2="blabla" var3 ="blablabla" .... />
  <data var1 = "bla" var2="blabla" var3 ="blablabla" .... />
  .....
  </week_52>
</tandlege_hansen>

现在的问题是:

while ($reader->read()) 
{
    if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'data')

我需要在这里的某个地方: 阅读week_xx, 提取week_numer(= xx), 与实际的week_number进行比较,并将XML-reader-position重新定位到实际周(this_week = week_xx)(欧洲标准),如果找到, 读取XML数据(var1 - &gt; var3), 显示并终止

我该怎么做?

1 个答案:

答案 0 :(得分:0)

来自PHP documentation

  

XMLReader扩展是一个XML Pull解析器。读者在文档流中作为光标前进,并在途中停在每个节点上。

换句话说,您不能从文档中的一个位置跳到另一个任意位置。

此外,该类允许您编辑Xml内容,您可以做的最多的是逐步读取Xml并通过手工将其写回文件来保存它。

更简单的解决方案是使用XMLReader,而是使用SimpleXMLdocumentation),它会加载将文档作为可编辑树。然后,您可以使用 xpath 查询来查找文档的特定节点。

缺点是,由于它一次加载整个文档,如果文档很大,可能需要大量内存。有关详细信息,请参阅这两个类的文档。