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?
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?
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..
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.

<?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

<?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>


Werkt dit ook als ik $data vul met de string die uit de database komt?
uiteraard.

Dat wordt dan iets als
<?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>';
}
?>

Reageren