Avatar billede warpgiga Nybegynder
12. februar 2004 - 13:30 Der er 5 kommentarer

Fletning og opsummering af flere xml dokumenter.

Hej,

Jeg er ved at udvikle et log analyse værktøj. Jeg har defineret nogle xml dokumenter som indeholder analyse for hver dag i sit eget xml dokument.

Det jeg vil kunne er at flette disse dokumenter om til et nyt akkumuleret xml dokument.

eksempel:

Analyse 1:
<logfile-analysis>
  <user name="JohnDoe" hits="30">
    <from-addr-list>
      <from-addr value="192.168.1.11" hits="10"/>
      <from-addr value="192.168.1.22" hits="10"/>
      <from-addr value="192.168.1.33" hits="10"/>
    </from-addr-list>
  </user>
</logfile-analysis>

Analyse 2:
<logfile-analysis>
  <user name="JohnDoe" hits="100">
    <from-addr-list>
      <from-addr value="192.168.1.22" hits="100"/>
    </from-addr-list>
  </user>
</logfile-analysis>

Her er det så min "drøm" at kunne flette disse sammen til:

<logfile-analysis>
  <user name="JohnDoe" hits="130">
    <from-addr-list>
      <from-addr value="192.168.1.11" hits="10"/>
      <from-addr value="192.168.1.22" hits="110"/>
      <from-addr value="192.168.1.33" hits="10"/>
    </from-addr-list>
  </user>
</logfile-analysis>

- Bemærk værdier er opsummerede.

Det bliver ikke mindre komplekst af at dette kun er et lille brudstykke, og at den jo skal flette noderne sammen og genkende nodes på f.eks name eller value attributen.

Jeg regner ikke med at få en løsning på dette nu og her, men vil gerne have lidt feedback og ideer til hvordan man nemmest / mest fleksibelt kunne fikse et sådant problem.

Jeg vil selvfølgelig helst undgå xsl extensions, men hvis det påkræves så skal det blot køre under Xalan for Java.

Kort sagt, der skal kunne flettes og tal værdier skal opsummeres.

Jeg håber virkelig i har et par gode idéer :o)

p.s. Det behøver ikke være XSL baseret, det kan også være noget Java, JSP, JSTL m.m...
Avatar billede arne_v Ekspert
13. februar 2004 - 21:25 #1
Umiddelbart tænker jeg Java kode med følgende konstruktion.

data struktur:

HashMap of key=username value=ArrayList
ArrayList of AddressHit
AdressHit String + int

kode logik:

loop over alle XML filer i directory {
  indlæs og parse XML fil med SAX parser og opdater data
}
konverter data til DOM træ
udskriv DOM træ

note:

jeg vil beregne user hits som summen af adresse hits for user
Avatar billede arne_v Ekspert
13. februar 2004 - 21:25 #2
Nok en kode orienteret løsning, men jeg ved at det kan bringes til at virke.
Avatar billede warpgiga Nybegynder
14. februar 2004 - 19:12 #3
Hej Arne, Tak for svaret - det er nogenlunde sådan jeg også vil løse den, men da min xml data er pænt kompleks med mange værdier der skal opsummeres, ledte jeg efter en simplere løsning.. Jeg må kigge lidt på mit projekt og se om jeg evt. kan modificere det eksisterende til at supporte "akkumulativ parsing"..
Avatar billede warpgiga Nybegynder
14. februar 2004 - 19:15 #4
jeg læste forleden om en XSLT extension funktion der hedder sum(), som desværre kun er specificeret men ikke implementeret i nogle parsere endnu.. :(

Den ville ellers have været perfekt:
sum(//user[@name='John Doe']/from-addr-list/from-addr/@hits)
Avatar billede Slettet bruger
15. februar 2004 - 21:54 #5
"sum()" er mig bekendt en del af XPath 1.0, hvilket vil sige at en XSLT 1.0 processor vel også supporterer den? (MSXML 4 gør ihvertfald).

/CS
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester