Имеются ХМЛ логи юзерских логинов на сервер
Состоят из повторяющизся элементов <record>
и один из входящих в record элементов выглядит так:
<message>Successful access from IP address 22.22.22.22 for domain domain.com ( userID? vasya )</message>
Для отчета нужно вытащить domain name и userID из этой записи.
Что-то мне никак не сообразиться как.
Any idea is greatly appreciated.
Cабина
XML question
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: XML question
(pardon my french)
It's not an XML question - your information is actually in text, which happened to be wrapped into XML element.
The most flexible way to treat text IMHO RegEx. JDK 1.4 can do it out of box.
Generally you'll need to parse XML first, pull out the message and parse it's text with RegEx (or just substring() methods.).
If XML is really simple - you can try to parse it directly as text.
It's not an XML question - your information is actually in text, which happened to be wrapped into XML element.
The most flexible way to treat text IMHO RegEx. JDK 1.4 can do it out of box.
Generally you'll need to parse XML first, pull out the message and parse it's text with RegEx (or just substring() methods.).
If XML is really simple - you can try to parse it directly as text.
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: XML question
Palych wrote:(pardon my french)
It's not an XML question - your information is actually in text, which happened to be wrapped into XML element.
The most flexible way to treat text IMHO RegEx. JDK 1.4 can do it out of box.
Generally you'll need to parse XML first, pull out the message and parse it's text with RegEx (or just substring() methods.).
If XML is really simple - you can try to parse it directly as text.
Да, что-то я в трех соснах заблудилась Действительно получается проще написать Джава Handler, а я почему-то хотела css отделаться
Сабина
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: XML question
Sabina wrote:Действительно получается проще написать Джава Handler, а я почему-то хотела css отделаться
Сабина
Что-то я опять засомневалась.
Получается если писать приложение, то надо интегрировать с какими-нить report-ами, то бишь надо:
1) писать Handler
2) создавать table data после отработки парсера
3) скормить эти table data какому-нибудь report приложению.
А отчеты эти нужны для внутреннего пользования, то есть надо просто представить информацию читабельно. Nothing fancy...
Может просто накропать css и пусть себе открывают эти xml файлы...
Сабина
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: XML question
Sabina wrote:ХМЛ из повторяющихся элементов <record>
и один из входящих в record элементов выглядит так:
<message>Successful access from IP address 22.22.22.22 for domain domain.com ( userID? vasya )</message>
нужно вытащить domain name и userID из этой записи.
----------
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="message">
<xsl:text>DOMAIN=</xsl:text>
<xsl:value-of select="substring-before(substring-after(.,'for domain '),' ')"/>
<xsl:text> </xsl:text>
<xsl:text>USER=</xsl:text>
<xsl:value-of select="substring-before(substring-after(.,'userID'),' )')"/>
</xsl:template>
<xsl:template match="record">
<xsl:for-each select="message">
<xsl:if test="contains(.,'Successful access from IP address')">
<xsl:apply-templates select="."/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
------------
Олег
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: XML question
helg wrote:<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="message">
<xsl:text>DOMAIN=</xsl:text>
<xsl:value-of select="substring-before(substring-after(.,'for domain '),' ')"/>
Олег
Это здорово, но там нет .xsd к этому файлу, только .dtd.
Мне ведь под .xsl нужно будет .xsd писать? Или не обязательно?
Сабина
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: XML question
Sabina wrote:Мне ведь под .xsl нужно будет .xsd писать?
Нет, конечно. Надо чтобы браузер понимал xsl. Все современное его понимает. К сожалению, на CSS такого не написать.
Чтобы смотреть это в браузере (т.е. в HTML), надо:
1. Добавить в вышеприведенный XSL корневой template для html-шапки и переводы строк в html-виде. См. результат ниже.
2. Записать это дело в файл 'userhostreport.xsl' в тот же каталог, где log.xml.
3. В log.xml первой строкой (или второй, если первая начитается с <?xml) добавить строку:
<?xml-stylesheet type="text/xsl" href="userhostreport.xsl"?>
Поскольку лог-файлы создаются какой программой, можно посмотреть эту программу на предмет автоматического добавления подобной строки. Понятно, что если надо, то в href можно вставить и путь с каталогами, и http://куда-надо/userhost.xsl
После этого, если открыть log.xml в браузере, можно увидеть желаемый отчет.
Олег
-----------------
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="message">
<xsl:text>DOMAIN=</xsl:text>
<xsl:value-of select="substring-before(substring-after(.,'for domain '),' ')"/>
<xsl:text> </xsl:text>
<xsl:text>USER=</xsl:text>
<xsl:value-of select="substring-before(substring-after(.,'userID'),' )')"/>
<br />
</xsl:template>
<xsl:template match="record">
<xsl:for-each select="message">
<xsl:if test="contains(.,'Successful access from IP address')">
<xsl:apply-templates select="."/>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match="/">
<html><body>
<h3>Access log report</h3>
<xsl:apply-templates select="*"/>
</body></html>
</xsl:template>
</xsl:stylesheet>
------------------
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: XML question
helg wrote:Поскольку лог-файлы создаются какой программой, можно посмотреть эту программу на предмет автоматического добавления подобной строки...
Я так и сделала. Какое красивое и простое решение оказалось. Спасибо вам, Олег, преогромное.
Сабина
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: XML question
Извиняюсь за дотошность.
Сейчас только раскопала, что файл этот создан и использованием
java.util.logging.Logger и ....FileHandler
Никто с этим не работал? Как вы визуализировали созданные XML файлы?
Там еще есть java.util.logging.SimpleFormatter, который выводит информацию примерно в таком виде
Jan 5, 2004 8:12:02 PM LogTest2 main
Successful access from IP address 22.22.22.22 for domain domain.com ( userID? vasya )
...
Как один из вариантов.
Спасибо,
Сабина
Сейчас только раскопала, что файл этот создан и использованием
java.util.logging.Logger и ....FileHandler
Никто с этим не работал? Как вы визуализировали созданные XML файлы?
Там еще есть java.util.logging.SimpleFormatter, который выводит информацию примерно в таком виде
Jan 5, 2004 8:12:02 PM LogTest2 main
Successful access from IP address 22.22.22.22 for domain domain.com ( userID? vasya )
...
Как один из вариантов.
Спасибо,
Сабина
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: XML question
[del]