Вот читаю тему, и как-то не вижу раскрытия вопроса xslt.
Сперва позвольте IMHO: во-первых, резать необходимо именно так, и только так, как url указан в реестре. И желательно своим собственным DPI. Это значит, если в выгрузке hxxp://bla-bla.biz/threads/Легал… в utf-8, то и на DPI отправится путь /threads/%D0%9B%D0%B5%D0%B3%D0%B0%D0%BB…, а если в cp1251, то /thread/%CB%E5%E3%E0%EB. Во-вторых, если в выгрузке указан протокол https, мы блокируем исходящие TCP пакеты на порт 443 указанных IP.
Сперва сдалал так: достаем все url с помощью xsltproc reg-url.xslt dump.xml | sort | uniq :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="content">
<xsl:for-each select="url">
<xsl:value-of select="."/><xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Разобрать с помощью простого регекспа каждый url на протокол, домен и путь, эскейпнуть последний, а затем собрать, думаю, не проблема. Меня пока устраивает простейший способ:
s/([\x00-\x1f\x7f-\xff])/sprintf("%%%02X",ord($1))/eg;
s/ /+/g
Строка не юникодная, массив байтов. (Особенно радуют, конечно, hxxp://nnm-club.me/forum/viewtopi%D1%81.php?t=123456+ — русская «с» во viewtopiс.php и пробел в конце).
Аналогично достаем все IP и, для удобства логов, домены https: xsltproc reg-ip.xslt dump.xml | sort | uniq .
<xsl:template match="content">
<xsl:if test="starts-with(url,'https')">
<xsl:value-of select="ip"/><xsl:text> </xsl:text>
<xsl:value-of select="domain"/>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
Сейчас немного переделал, в один файл складываются сразу и IP, и url, а дальше выбрасываются лишние url, если домен блокируется целиком, и для загрузки в SCE фильтруется обычным | grep '^http' > ~ftp/sce-urls . Список IP — аналогично.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="content">
<xsl:for-each select="url">
<xsl:choose>
<xsl:when test="starts-with(.,'https')">
<xsl:value-of select="../ip"/><xsl:text> </xsl:text>
<xsl:value-of select="../domain"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/><xsl:text>
</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Намного проще и быстрее, чем писать на коленке какие-то парсеры.