【问题标题】:XML and PHP5 DOMXML 和 PHP5 DOM
【发布时间】:2012-04-19 16:12:19
【问题描述】:

我正在开发一个应用程序,如果我需要转换如下所示的 XML 文档(words.xml):

<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE words SYSTEM "words.dtd">
<words>
<word id="word_1">Alfa</word>
<word id="word_2">Beta</word>
<word id="word_3">Gamma</word>
<word id="word_4">Delta</word>
<word id="word_5">Zeta</word>
</words>

使用 PHP5 和 DOM。我希望结果是(在这种情况下):

word_1 = Alfa
word_2 = Beta
word_3 = Gamma
word_4 = Delta
word_5 = Zeta 

我的 PHP 代码:

<?php

$xmlHitzakDok = new DOMDocument();
$xmlHitzakDok->load("words.xml");

$x = $xmlHitzakDok->documentElement;
foreach ($x->childNodes AS $item)
  {
  print $item->nodeName . " = " . $item->nodeValue . "<br />";
  }
?>

我没有得到任何结果。问题出在哪里?

【问题讨论】:

  • 会不会更像“node->attribute('id')” = ?
  • 错误报告和显示错误设置是否正确?没有发现错误?

标签: php xml dom


【解决方案1】:

问题不在于$xmlHitzakDok-&gt;documentElement 不是&lt;words&gt; 元素,而是文档本身,它不包含任何数据。

我建议使用 xpath 来获取你想要的元素。

$xPath = new DOMXPath($xmlHitzakDok);

foreach ($xPath->query('//words/word') AS $item)
{
    echo $item->getAttribute('id') . " = " . $item->nodeValue . "<br/>";
}

【讨论】:

  • 为我工作 (codepad.org/oi3XP7cm)。你确定words.xml 存在吗?尝试使用$xmlHitzakDok-&gt;load(realpath("words.xml"));
  • 或者试试if($xmlHitzakDok-&gt;load("words.xml") === FALSE){die('error loading file');} 我猜是文件没有被正确加载。
  • 嗨,我这样做了,浏览器上出现“错误加载文件”消息。我不知道为什么文件无法加载。 “words.xml”与 php 位于同一文件夹中,正好在 /var/www/myfolder/ 中。为什么是这样?任何想法@Rocket?谢谢。
  • 我终于解决了问题,不得不将权限更改为words.xml。感谢您的时间@Rocket。
  • @Rocket: $xmlHitzakDok-&gt;documentElement&lt;words&gt; 元素,您可以使用-&gt;documentElement-&gt;tagName 轻松检查,也可以查看codepad.org/YdCCk4LX(仅供参考)
猜你喜欢
  • 2011-01-24
  • 2012-05-05
  • 1970-01-01
  • 2011-01-22
  • 2011-09-18
  • 2012-11-02
  • 2012-02-12
  • 2010-12-29
  • 2023-03-21
相关资源
最近更新 更多