0

我有一个问题,我有一个脚本应该在 XML 文件中搜索匹配的字符串。这是我的脚本:

   <?php
$file = "klein.xml";
$lines = file($file);
foreach ($lines as $line_num => $line)
{
    echo htmlentities($line);
    echo "<br>";

}

   if (preg_match("/message/", htmlentities($line), $found))
   {
     echo "Found!";
     echo $found[0]; 
     echo "test";
   }
   else
   {
       echo "Not Found!";
   }
?>

这是我正在使用的 xml 文件:

    <?xml version="1.0" encoding="ISO-8859-1"?>
<product-data>
<message-header>
<message-id>OR-1361163557-gr</message-id>
<message-timestamp>1361163557</message-timestamp>
<export-version current_version="1">OGPDX-2.01.01</export-version>
</message-header>
</product-data>

问题是当我预匹配“产品”时它可以正常工作但是当我尝试预匹配另一个字符串即“消息”时它不起作用?

我很好奇解决方案,在此先感谢!

4

3 回答 3

0

你能检查一下这段代码吗,我注意到你把if循环放在外面foreach;因此只执行最后一行。

<?php
$file = "klein.xml";
$lines = file($file);
foreach ($lines as $line_num => $line)
{
   if (preg_match("/message/", htmlentities($line), $found))
   {
     echo "Found ".$found[0]."<br />";
   }
}
?>
于 2013-03-21T08:13:34.133 回答
0

问题出在你的逻辑上:你只检查最后一个值$line是包含</product-data>

于 2013-03-21T08:14:46.993 回答
0

所以你在搜索什么?xml 的一行...
当您搜索“产品”(在最后一行)时,$line 在最后一行。

foreach ($lines as $line_num => $line)
{
   if (preg_match("/message/", $line , $found))
   {
     echo "Line: $line_num - ".$found[0]." <br>";
   }
}
于 2013-03-21T08:16:10.330 回答