Frage

Ich habe ein einfaches Tool geschrieben, um mithilfe von Abfragen, die der Benutzer eingibt, einen DBUnit-XML-Datensatz zu generieren.Ich möchte jede in die XML-Datei eingegebene Abfrage als Kommentar einschließen, aber die DBUnit-API zum Generieren der XML-Datei unterstützt das Einfügen des Kommentars an der gewünschten Stelle (über den von ihr generierten Daten) nicht, daher greife ich auf das Einfügen des Kommentars zurück Kommentieren Sie mit ALLEN Abfragen entweder oben oder unten.

Also meine Frage:Ist es gültiges XML, es an einem der beiden Speicherorte zu platzieren?Beispiel oben in der XML-Deklaration:

<!-- Queries used: ... -->
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  ...
</dataset>

Oder unterhalb des Wurzelknotens:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  ...
</dataset>
<!-- Queries used: ... -->

Ich habe vor, es zunächst mit der oben genannten XML-Deklaration zu versuchen, aber ich habe Zweifel, ob das gültiges XML ist, trotz der Behauptung von Wikipedia:

Kommentare können an einer beliebigen Stelle im Baum platziert werden, auch im Text, wenn der Inhalt des Elements Text oder #PCDATA ist.

Ich habe vor, zurück zu posten, wenn das funktioniert, aber es wäre schön zu wissen, ob es sich um einen offiziellen XML-Standard handelt.

AKTUALISIEREN: Sehen meine Antwort unten für das Ergebnis meines Tests.

War es hilfreich?

Lösung

Entsprechend der XML-Spezifikation, ein wohlgeformtes XML-Dokument ist:

document ::= prolog element Misc*

Wo prolog Ist

prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?

Und Misc Ist

Misc ::= Comment | PI | S

Und

XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

Das heißt, wenn Sie oben Kommentare haben möchten, können Sie keine XML-Typdeklaration haben.

Sie können jedoch Kommentare nach der Deklaration und außerhalb des Dokumentelements einfügen, entweder oben oder unten im Dokument, weil Misc* kann Kommentare enthalten.

Die Spezifikation stimmt mit Wikipedia über Kommentare überein:

2,5 Kommentare

[Definition:Kommentare können überall in einem Dokument außerhalb anderer Markups erscheinen;Darüber hinaus können sie innerhalb der Dokumenttypdeklaration an den von der Grammatik zugelassenen Stellen erscheinen.Sie sind nicht Teil der Zeichendaten des Dokuments;Ein XML-Prozessor KANN, muss aber nicht, es einer Anwendung ermöglichen, den Text von Kommentaren abzurufen.Aus Kompatibilitätsgründen DARF die Zeichenfolge „--“ (doppelter Bindestrich) NICHT in Kommentaren vorkommen.] Referenzen auf Parameterentitäten DÜRFEN in Kommentaren NICHT erkannt werden.

All dies zusammen bedeutet, dass Sie Kommentare abgeben können überall dort, wo es nicht in einem anderen Markup enthalten ist, außer dass du Sie können keine XML-Deklaration haben, wenn Sie mit einem Kommentar beginnen.

Während in der Theorie die Theorie mit der Praxis übereinstimmt, ist dies in der Praxis jedoch nicht der Fall. Daher wäre ich gespannt, wie Ihr Experiment funktioniert.

Andere Tipps

Das erste Beispiel ist kein gültiges XML, die Deklaration muss an erster Stelle in einem XML-Dokument stehen.

Aber darüber hinaus können Kommentare überall hingehen.

Korrektur Ihres ersten Beispiels:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Queries used: ... -->
<dataset>
</dataset>

Die Verarbeitungsanweisung muss das allererste im XML-Inhalt sein (siehe XML-Kommentar Und Verarbeitungshinweise).Folgendes sollte funktionieren:

<?xml version='1.0' encoding='UTF-8'?>
<!-- Queries used: ... -->
<dataset>
  ...
</dataset>

Vielen Dank an alle für die Antworten!

Wie sich herausstellte, schien der Kommentar vor der Datei zu funktionieren, aber als ich mich mit der DBUnit-Quelle befasste, lag das daran, dass die Validierung deaktiviert war.

Ich habe versucht, ein einfaches Dokument zu laden über:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("/path/to/file"));

und dies schlägt mit einer Ausnahme fehl, da die XML-Deklaration nicht das erste ist (wie andere angegeben haben).

Obwohl DBUnit funktionieren würde, bevorzuge ich gültiges XML, also habe ich den Kommentar ans Ende verschoben (da DBUnit die XML-Deklaration generiert, ist es keine Option, den Kommentar darunter zu platzieren, obwohl ich das vorziehen würde.) .Zumindest nicht, ohne das XML nachträglich zu ändern, was mehr Arbeit bedeuten würde, als es wert ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top