在 PHP 中查找特定行的文件

3
我有一个长这样的XML文件。
<table id="0">
</table>
<table id="1">
</table>
<table id="2">
</table>

我想检查一个id为x的表是否存在。

我一直在尝试这个,但不起作用。

$file=fopen("config.xml","a+");
while (!feof($file))
  {
      if(fgets($file). "<br>" === '<table id="0">'){
        echo fgets($file). "<br>";
      }
  }
fclose($file);

你为什么要使用'a+'来打开文件?'a'表示追加,因此它将指针放在文件末尾。请尝试使用$file=fopen("config.xml","r"); - gen_Eric
因为在代码后面我也会向文件中添加内容。 - Rasmus Nørskov
1
@user2103723:那么使用 r+。这样你就可以从开头读取,然后将其移动到稍后想要写入的位置。 - gen_Eric
3个回答

4
最简单的方法是使用PHP Simple HTML DOM类:
$html = file_get_html('file.xml');
$ret = $html->find('div[id=foo]'); 

[编辑] 关于代码无法运行的问题......请注意,您粘贴的xml没有
字符,因此这个字符串比较将返回false。如果您想考虑换行符,则应该写成\ n ... 然而上面的解决方案更好,因为您不必获取非常严格格式的输入文件。


使用这种方法,如果找到ID,我该如何输出一些内容? - Rasmus Nørskov
@user2103723:听起来你想做的不仅仅是找到id。你的目标是什么?像这样结构化加载数据后,进一步处理数据会更容易。 - Orbling
我会提出一个新问题,询问我想要做什么,没有考虑我的方法是否正确。 - Rasmus Nørskov

2
您可以使用DOMDocument类,并使用XPath按ID查找。有一个getElementById()方法,但它存在问题。
// Setup sample data

$html =<<<EOT
<table id="0">
</table>
<table id="1">
</table>
<table id="2">
</table>
EOT;

$id = 3;

// Parse html
$doc = new DOMDocument();
$doc->loadHTML($html);

// Alternatively you can load from a file
// $doc->loadHTMLFile($filename);

// Find the ID
$xpath = new DOMXPath($doc);
$table = $xpath->query("//*[@id='" . $id . "']")->item(0);

echo "Found: " . ($table ? 'yes' : 'no');

1
你正在使用模式'a+'打开文件。 'a'表示追加,因此它将指针放在文件末尾。
如果您想读取文件,可能需要从开头开始,因此请使用模式'r'(或'r + ')。 有关不同文件模式,请查阅手册:http://www.php.net/manual/en/function.fopen.php 另外,fgets($file). "<br>" === '<table id="0">'永远不会成立!您正在将<br>附加到字符串中,然后将其与<table id="0">进行比较,期望它匹配。
$file = fopen("config.xml", "r");
while (!feof($file)){
    $line = fgets($file);
    if($line === '<table id="0">'){
        echo $line. "<br>";
    }
}
fclose($file);

以后再用 "a" 打开它并写入,这样可行吗? - Rasmus Nørskov
@user2103723:是的。只要确保您只打开一个文件句柄就可以了 :-) - gen_Eric
使用这种方法,我没有得到任何回显。 - Rasmus Nørskov
@user2103723:这些行可能不完全相同。尝试对每个$line使用var_dump,看看是否有任何额外的内容在行上。 - gen_Eric
@user2103723:实际上,我更喜欢另一个回答,使用DOM解析器。我只是想修复你所提供的内容中存在的问题。 - gen_Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接