1

我现在有几天出了问题:s ...我试图在字符串中获取一些变化的数据,字符串是这样的:

<docdata>
 <!-- News Identifier -->
        <doc-id id-string ="YBY15349" />

        <!-- Date of issue -->
        <date.issue norm ="2012-09-22 19:52" />
        <!-- Date of release -->
        <date.release norm ="2012-09-22 19:52" />
      </docdata>

我需要的只是"2012-09-22 19:52"中的日期 ,它存储在某种类型的 xml 中的字符串,顺便说一下格式错误。所以我不能使用普通的 xml 解析器,我已经加载/读取文件来更改一些字符集

    $fname = $file;
    $fhandle = fopen($fname,"r");
    $content = fread($fhandle,filesize($fname));
    str_replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>", $content); 
etc..

这项工作就像一个魅力,但我无法使用它的字符串。我尝试使用 preg_match_all 但我无法正确处理。它有一种简单的方法来搜索这个值

<date.issue norm ="2012-09-22 19:52" />

并仅获取变量中的日期?

提前感谢,对不起我的英语。

4

3 回答 3

1

匹配以下内容的正则表达式:

<date.issue norm ="2012-09-22 19:52" />

将会:

/<date\.issue\s*norm\s*="([^"]*)"/

在代码中:

preg_match_all('/<date\.issue\s*norm\s*="([^"]*)"/', $content, $matches);
// $matches[1] contains all the dates
于 2012-09-26T02:17:38.313 回答
1

PHP 文档

file_get_contents() 是将文件内容读入字符串的首选方法。如果您的操作系统支持,它将使用内存映射技术来提高性能。

因此,您的代码将变为:

$content = file_get_contents($file);
$content = str_replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>", $content);
preg_match_all('/date\.issue norm ="([^"]+)" /', $content, $date);

默认行为是将带括号的匹配项存储在数组中$date[1]。因此,您可能会遍历$date[1][0]$date[1][1]等。

于 2012-09-26T02:37:52.603 回答
0

而不是使用

fopen($filename)

采用

$filename = '/path/to/file.xml';
$filearray = file($filename) // pulls the while file into an array by lines

$searchstr = 'date.issue';

foreach($filearray as $line) {
   if(stristr($line,$searchstr)) { // <-- forgot the )
      $linearray = explode('"',$line);
      // your date should be $linearray[1];
      echo $linearray[1]."\n";  // to test your output
      // rest of your code here
   }
}

这样您就可以在整个文件中搜索您的搜索字符串,并且格式错误的 xml 应该不是问题。

于 2012-09-26T02:19:18.130 回答