【发布时间】:2016-05-21 14:56:33
【问题描述】:
我有一个 Text.xml 文件,其中包含一些文本和该文本中的参考书目。它看起来像这样:
Text.xml
<p>…blabla S.King (1987). Bla bla bla J.Doe (2001) blabla bla J.Martin (1995) blabla…</p>
我有一个 Reference.txt 文件,其中包含书目参考列表和每个参考的 ID 号。它看起来像这样:
Reference.txt
b1#S.King (1987)
b2#J.Doe (2001)
b3#J.Martin (1995)
我想从 Reference.txt 中找到所有参考书目到 Text.xml,然后添加一个带有 ID 的标签。目标是 TextWithReference.xml 必须如下所示:
TextWithReference.xml
<p>…blabla <ref type="biblio" target=“b1”>S.King (1987)</ref>. Bla bla bla <ref type="biblio" target=“b2”>J.Doe (2001)</ref> blabla bla <ref type="biblio" target=“b3”>J.Martin (1995)</ref> blabla…</p>
为此,我使用了一个 php 文件。
搜索和替换.php
<?php
$handle = fopen("Reference.txt","r");
while(!feof($handle))
{
$ligne = fgets($handle,1024);
$tabRef[] = $ligne;
}
fclose($handle);
$handleXML = fopen("Text.xml","r");
$fp = fopen("TextWithReference.xml", "w");
while(!feof($handleXML))
{
$ligneXML = fgets($handleXML,2048);
for($i=0;$i<sizeof($tabRef);$i++)
{
$tabSearch = explode('/#/',$tabRef[$i]);
$xmlID = $tabSearch[0];
$searchString = trim($tabSearch[1]);
if(preg_match('/$searchString/',$ligneXML))
{
$ligneXML = preg_replace('/($searchString)/','/<ref type=\"biblio\" target=\"#$xmlID\">\\0</ref>/',$ligneXML);
}
}
fwrite($fp, $ligneXML);
}
fclose($handleXML);
fclose($fp);
?>
问题是这个 php 脚本只是复制 TextWithReference.xml 中的 Text.xml 没有识别参考书目,也没有添加标签……
非常感谢您的帮助!
【问题讨论】:
-
如果您的 Text.xml 确实是格式良好的 xml,我认为更快的方法(干净,使用很少的内存)是使用组合 XMLReader/XMLWriter 来创建 TextWithReference.xml。跨度>
-
你能为你的两个xml文件提供一个url吗?
-
在创建
$tabRef时,您应该修剪和分解搜索字符串,而不是针对 XML 文件中的每一行。 -
是的,Text.xml 是格式良好的 xml。您的意思是直接在 XmlEditor 中使用正则表达式还是使用 xslt?
-
不,XMLReader 是一个内置的 PHP 类,旨在逐个元素(开始标记、注释、文本节点...)解析 XML 文件元素,而 XMLWriter 通过以下方式写入 XML 文件元素元素也是。 XSLT 为什么不呢,但它不是很方便,而且 PHP 速度特别慢。
标签: php xml search replace preg-replace