О, ок, статические файлы и php xml.
Сначала вам нужно будет найти различия и получить массив каждой отличающейся строки.
Затем вы можете запросить их в xml.
Чтобы получить разные фразы, вам нужно извлечь весь текст из html в массив.
Единственный другой способ, который я вижу, — это сравнивать отдельные слова, что означает, что вы теряете фразы.
Итак, я написал код для извлечения «фраз» из HTML.
Я думаю, что запрос xpath правильный, но я не могу заставить его вернуть фактический путь.
Я дважды читал, что это невозможно.
Если ты сможешь это сделать
пожалуйста дайте мне знать, как вы это сделали.
<?php
$strConstant = file_get_contents("Test1.htm");
$strVariable = file_get_contents("Test2.htm");
$arXPaths = getXPaths($strVariable, getDiffArray($strConstant, $strVariable));
foreach($arXPaths as $value) {
echo $value . "<br/>";
}
function getXPaths($strVariable, $arDiff) {
$arXPaths = array();
$doc = new DOMDocument();
$doc->loadXML($strVariable);
if(empty($arDiff) || !is_array($arDiff)) return false;
foreach($arDiff as $strDiff) {
$query = "http://*[text()[contains(.,'" . $strDiff . "')]]";
$xpathvar = new Domxpath($doc);
$queryResult = $xpathvar->query($query);
foreach($queryResult as $node) {
$arXPaths[] = $node->getNodePath(); //this isn't correct
}
}
return $arXPaths;
}
function getDiffArray($strConstant, $strVariable){
$arDiff = array();
$arConstant = getElemTextArray($strConstant);
$arVariable = getElemTextArray($strVariable);
$diff = diff($arConstant, $arVariable);
if(is_array($diff)) {
foreach($diff as $k){
if(is_array($k))
{
if(!empty($k['i'])) {
foreach($k['i'] as $key => $value) {
$arDiff[] = $value;
}
}
}
}
}
return $arDiff;
}
function diff($old, $new){
/*
(C) Paul Butler 2007 <[URL='https://lumtu.com/yti/ZgccgZy9odHRwOi8vcGF1bGJ1dGxlci5vicl']http://www.paulbutler.org/[/URL]>
May be used and distributed under the zlib/libpng license.
*/
$matrix = array();
$maxlen = 0;
foreach($old as $oindex => $ovalue){
$nkeys = array_keys($new, $ovalue);
foreach($nkeys as $nindex){
$matrix[$oindex][$nindex] = isset($matrix[$oindex - 1][$nindex - 1]) ?
$matrix[$oindex - 1][$nindex - 1] + 1 : 1;
if($matrix[$oindex][$nindex] > $maxlen){
$maxlen = $matrix[$oindex][$nindex];
$omax = $oindex + 1 - $maxlen;
$nmax = $nindex + 1 - $maxlen;
}
}
}
if($maxlen == 0) return array(array('d'=>$old, 'i'=>$new));
return array_merge(
diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)),
array_slice($new, $nmax, $maxlen),
diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen)));
}
function getElemTextArray($html) {
$arTexts = array();
$nLastIdx = 0;
$bBreak = false;
$reg = "/(?<=>)\s*(?=<)|(?<=>)\n*([^<]+)/";
if (preg_match_all($reg, $html, $arMatches)) {
foreach($arMatches as $key => $value) {
foreach($value as $key1 => $value1) {
if(empty(trim($value1))) continue;
if($key1 < $nLastIdx) {
$bBreak = true;
break;
}
$nLastIdx = $key1;
$arTexts[] = $value1;
}
if($bBreak) break;
}
}
return $arTexts;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[URL='https://lumtu.com/yti/dk55kdGRodHRwOi8vdzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbCh52']http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/URL]">
<html xmlns="[URL='https://lumtu.com/yti/b0hh0bWxodHRwOi8vdzMub3JnLzE5OTkveGvkT']http://www.w3.org/1999/xhtml[/URL]">
<head>
<meta http-equiv="Content-Type" content="текст/html; кодировка = utf-8" />
<title>Untitled Document</title>
</head>
<body>
</body>
</html>
Код (разметка):