1 regel rood weergeven in XML

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marijke Hakvoort

Marijke Hakvoort

28/11/2012 11:05:13
Quote Anchor link
Hallo,

Ik wil graag in een xml bestand, die als plain text in de database staat en vervolgens opgehaald wordt,
een "foutregel" rood laten weergeven. is er een mogelijkheid om de plain tekst xml, per regel te tellen zodat ik aan kan geven dat ik op bijv. regel 10 een rode tekst wil?
 
PHP hulp

PHP hulp

27/11/2024 22:59:46
 
Kris Peeters

Kris Peeters

28/11/2012 11:31:50
Quote Anchor link
Het lijkt me niet traditioneel om een xml-document in een DB te steken; zeker als je daar nog manipulaties aan wil doen. Nogal vreemd.

Het kan uiteraard wel. xml is maar een string; dus je kan die opslaan in een db, net zoals het in een bestand kan.

Dan kan je die string benaderen, bv. met simpleXML, net zoals dat voor een een .xml bestand kan.

Trouwens, waarom heb je het over regel per regel... ? XML werkt met een structuur, zoals die van html. Je gaat niet de tiende regel zoeken; je gaat het tiende child-element zoeken.

Het lijkt me dat je technologieën wil gebruiken waarvoor ze niet dienen. Het is niet de BD-manier, het is niet de xml-manier ... en dan wil je met string-operaties regels tellen.


Kan je dit wat duiden?
Is er een reden waarom het via xml moet? Is er een reden waarom je die in een db steekt? Is daarom gevraagd?
Gewijzigd op 28/11/2012 11:33:19 door Kris Peeters
 
Marijke Hakvoort

Marijke Hakvoort

28/11/2012 11:39:10
Quote Anchor link
Het gaat hier om een XML validator. Er is ook een kopje geschiedenis waarin je alle fouten kon zien die er de vorige keer gemaakt waren. De betreffende XML kun je dan inzien dmv een pop-upje met daarin dus plain text opgehaald vanuit de database.
Nu willen we graag dat de regel waarin de fout zat rood gekleurd wordt..
 
Kris Peeters

Kris Peeters

28/11/2012 12:15:54
Quote Anchor link
Okay, bekijk dit eens.
Ik negeer even het DB-aspect. Zoals ik zei, het gaat er slechts om die data in een string te steken; die string komt bij jou van een DB ...

Dit is een voorbeeld van wat het resultaat ongeveer moet worden, lijkt me.
O ja, ik geef dus de mogelijkheid om verschillend lijnen aan te passen; dit leek me interessanter. Dus parameter 2 is een array.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$data
= file_get_contents('xml.xml');
$result = '<ul>' . highlightLines($data, array(2, 4)) . '</ul>';  // lijnen 2 en 4 rood maken

echo '
<style>
  .highlighted {
    color: red;
  }
  li {
    list-style: none;
  }
</style>
'
. $result;

function
highlightLines($data, array $highlightedLines) {
  $result = '';
  $lines = explode(PHP_EOL, $data);
  foreach ($lines as $key=>$line) {
    $class="normal";
    if (in_array($key + 1, $highlightedLines)) {
      $class="highlighted";
    }

    $class = $key + 1 ===
    $result .= '<li class="' . $class . '">' . htmlentities($line) . '</li>';
  }

  return $result;
}

?>


sla dit op als xml.xml
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Gewijzigd op 28/11/2012 12:23:11 door Kris Peeters
 
Marijke Hakvoort

Marijke Hakvoort

28/11/2012 12:45:07
Quote Anchor link
Werkt dit ook als ik $data vul met de string die uit de database komt?
 
Kris Peeters

Kris Peeters

28/11/2012 12:55:48
Quote Anchor link
uiteraard.

Dat wordt dan iets als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
...
while ($row = mysql_fetch_assoc($res)) { // dit gaat uit van: het volledige xml-document staat in 1 veld van 1 record
  //

  $data = $row['xml'];
  echo '<ul>' . highlightLines($data, array(2, 4)) . '</ul>';
}

?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.