1 regel rood weergeven in XML
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?
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
Nu willen we graag dat de regel waarin de fout zat rood gekleurd wordt..
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)
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
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;
}
?>
$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)
1
2
3
4
5
6
7
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>
<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
Werkt dit ook als ik $data vul met de string die uit de database komt?
Dat wordt dan iets als
Code (php)
1
2
3
4
5
6
7
8
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>';
}
?>
...
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>';
}
?>