XML question

User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

XML question

Post by Sabina »

Имеются ХМЛ логи юзерских логинов на сервер

Состоят из повторяющизся элементов <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абина
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Re: XML question

Post by Palych »

(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.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: XML question

Post by Sabina »

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.


Да, что-то я в трех соснах заблудилась :oops: Действительно получается проще написать Джава Handler, а я почему-то хотела css отделаться :)

Сабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: XML question

Post by Sabina »

Sabina wrote:Действительно получается проще написать Джава Handler, а я почему-то хотела css отделаться :)
Сабина


Что-то я опять засомневалась.
Получается если писать приложение, то надо интегрировать с какими-нить report-ами, то бишь надо:

1) писать Handler
2) создавать table data после отработки парсера
3) скормить эти table data какому-нибудь report приложению.

А отчеты эти нужны для внутреннего пользования, то есть надо просто представить информацию читабельно. Nothing fancy...

Может просто накропать css и пусть себе открывают эти xml файлы...

Сабина
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: XML question

Post by helg »

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>
------------
Олег
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: XML question

Post by Sabina »

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 писать? Или не обязательно?

Сабина
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: XML question

Post by helg »

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>
------------------
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: XML question

Post by Sabina »

helg wrote:Поскольку лог-файлы создаются какой программой, можно посмотреть эту программу на предмет автоматического добавления подобной строки...


Я так и сделала. Какое красивое и простое решение оказалось. Спасибо вам, Олег, преогромное.

Сабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: XML question

Post by Sabina »

Извиняюсь за дотошность.
Сейчас только раскопала, что файл этот создан и использованием
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 )
...

Как один из вариантов.

Спасибо,
Сабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: XML question

Post by Sabina »

[del]

Return to “Вопросы и новости IT”