如何使用php使用DOM XML解析从xml文件中显示带注释的图像?

时间:2016-01-30 09:33:35

标签: php xml dom

<surface>  
    <graphic url="Z:\home\ashutosh\Desktop\imgdone\0015 Dalai       Lama\0001.jpeg" width="208px" height="242px"/>
    <zone xml:id="imtArea_0" rendition="_0015" ulx="47" uly="68" lrx="143" lry="172" rend="visible"/>

</surface>

我的目标是加载由图形的url属性给出的图像,并将其作为ulx,uly,lrx和lry给出的坐标进行注释。当我运行上面的代码时,我将图形作为表面的子节点,但我无法知道如何从作为图形属性的url中提取图像。

因此,首先有人可以告诉我如何使用DOM解析从给定的URL加载图像,其次当我的图像显示时,如何使用坐标ulx,uly在图像的表面周围绘制一个边界框.... LRY。

已编辑,我认为这有助于理解问题

请帮助!!

<?php

$xmlDoc = new DOMDocument();
$xmlDoc->load("0001.xml");

$elements = $xmlDoc->getElementsByTagName('surface');
foreach ($elements as $node) 
{
     if($node->childNodes->length)
     {
        foreach($node->childNodes as $child)
{   
        echo $child->nodeName,',';
        echo $child->nodeName,','->nodeValue;
}   

  }

 }
?>

1 个答案:

答案 0 :(得分:0)

使用Xpath表达式从XML中获取数据很简单。

$xml = <<<'XML'
<surface>  
    <graphic url="Z:\home\ashutosh\Desktop\imgdone\0015 Dalai       Lama\0001.jpeg" width="208px" height="242px"/>
    <zone xml:id="imtArea_0" rendition="_0015" ulx="47" uly="68" lrx="143" lry="172" rend="visible"/>
</surface>
XML;

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

foreach ($xpath->evaluate('//surface') as $surface) {
  var_dump(
    [
      'url' => $xpath->evaluate('string(graphic/@url)', $surface),
      'ulx' => $xpath->evaluate('number(zone/@ulx)', $surface),
      'uly' => $xpath->evaluate('number(zone/@uly)', $surface),
      'lrx' => $xpath->evaluate('number(zone/@lrx)', $surface),
      'lry' => $xpath->evaluate('number(zone/@lry)', $surface),
    ] 
  );
}

输出:

array(5) {
  ["url"]=>
  string(64) "Z:\home\ashutosh\Desktop\imgdone\0015 Dalai       Lama\0001.jpeg"
  ["ulx"]=>
  float(47)
  ["uly"]=>
  float(68)
  ["lrx"]=>
  float(143)
  ["lry"]=>
  float(172)
}

您如何使用数据取决于预期结果。您可以使用图像功能生成带有矩形的图像。另一种可能性是生成具有数据属性的img标记,并使用JavaScript(在浏览器中)将该矩形生成为div。这将允许轻松的互动。