Извлечение микроданных из XHTML с PHP - используя RegEx? - PullRequest
1 голос
/ 19 июня 2011

Во-первых: я прочитал общее;не используйте RegEx для аргументов XHTML, таких как этот: RegEx соответствует открытым тегам, за исключением автономных тегов XHTML , и я понимаю, как RegEx потерпит неудачу на вложенных узлах XHTML или XML.не понимаю, почему манипулирование атрибутами одного XML-файла должно нарушаться с помощью RegEx.Так что, кажется, есть исключения из общего правила.Атрибуты всегда содержатся в одном узле, начинающемся с < и заканчивающемся > любым другим < or > между ними, нарушит XML, поэтому такого не может быть.

Теперь я хотел бы очистить строку XHTML от любых микроданных, которые она может содержать.Это любые атрибуты itemscope, itemtype, itemprop, itemid и itemref.Примерно так:

...
<body itemscope="itemscope" itemtype="http://schema.org/WebPage">
<div itemprop="maincontent">content</div>
...

Какой лучший способ сделать это в PHP?

1 Ответ

4 голосов
/ 19 июня 2011

Я бы на самом деле предложил:

  1. Загрузка строки с чем-то вроде SimpleXML.
  2. Удаление атрибутов, которые вы хотите очистить.
  3. Сохранение обратнов строку.

Существует множество проблем с пространством имен, которые я не знаю, как вам придется справляться, но это, вероятно, будет чище / счастливее, чем попытка построить одно или несколько регулярных выражений.выражения и убедитесь, что вы ничего не пропустите.

РЕДАКТИРОВАТЬ: оказывается, SimpleXML не будет работать (ограниченные возможности модификации), но DOM будет.Примерно так:

$data=<<<END1
<body itemscope="itemscope" itemtype="http://schema.org/WebPage">
<div itemprop="maincontent">content</div>
</body>
END1;

$xml=new DOMDocument();
$xml->loadXML($data);

// find every relevant node
$xpath = new DOMXPath($xml);
$attr = $xpath->query("//@itemscope|//@itemprop|//@itemtype");
foreach ($attr as $entry) {
  $entry->parentNode->removeAttribute($entry->nodeName);
}
echo $xml->saveXML();

Вам нужно изменить его, чтобы включить все атрибуты, которые вы хотите удалить, и, как я сказал, я понятия не имею, как он будет работать с пространствами имен, но это начало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...