Wie füge ich & hinzu, usw. in XML-Attributwerten

Lesezeit: 3 Minuten

Benutzer-Avatar
Sudh

Ich möchte eine XML-Datei erstellen, die zum Speichern der Struktur eines Java-Programms verwendet wird. Ich kann das Java-Programm erfolgreich parsen und die Tags nach Bedarf erstellen. Das Problem tritt auf, wenn ich versuche, den Quellcode in meine Tags einzufügen, da der Java-Quellcode möglicherweise eine große Anzahl von Entitätsreferenzen und reservierten Zeichen wie z &, < ,> , &. Ich kann kein gültiges XML erstellen.

Mein XML sollte so aussehen:

<?xml version="1.0"?>
<prg name="prg_name">
  <class name= "class_name>
    <parent>parent class</parent>
      <interface>Interface name</interface>
.
.
.
      <method name= "method_name">
        <statement>the ordinary java statement</statement>
        <if condition="Conditional Expression">
          <statement> true statements </statement>
        </if>
        <else>
          <statement> false statements </statement>
        </else>
        <statement> usual control statements </statement>
 .
 .
 .
      </method>
    </class>
 .
 .
 .
 </prg>

So, aber das Problem sind bedingte Ausdrücke if oder andere Aussagen haben eine Menge & oder andere reservierte Symbole in ihnen, die verhindern, dass XML validiert wird. Da all diese Daten (Quellcode) vom Benutzer bereitgestellt werden, habe ich wenig Kontrolle darüber. Den Charakteren zu entkommen wird sehr zeitintensiv sein.

Ich kann CDATA verwenden, um den Elementtext zu maskieren, aber es kann nicht für Attributwerte verwendet werden, die bedingte Ausdrücke enthalten. ich benutze Antlr Java-Grammatik zum Analysieren des Java-Programms und Abrufen der Attribute und des Inhalts für die Tags. Gibt es also eine andere Abhilfe dafür?

Sie müssen fliehen

" to  &quot;
' to  &apos;
< to  &lt;
> to  &gt;
& to  &amp;

für XML.

  • Wie wäre es mit einem + (plus)

    – Das LD

    15. März 2017 um 15:57 Uhr

  • @LarsVandeDonk “+” ist in Ordnung, so wie es ist, muss es nicht in XML maskiert werden. Vielleicht haben Sie über URL-Escape gesprochen?

    – izogfif

    3. Juli 2017 um 17:48 Uhr

In XML-Attributen müssen Sie maskieren

" with &quot;
< with &lt;
& with &amp;

wenn Sie Attributwerte in doppelte Anführungszeichen setzen ("), z.B

<MyTag attr="If a&lt;b &amp; b&lt;c then a&lt;c, it's obvious"/>

bedeutet Etikett MyTag mit Attribut attr mit Text If a<b & b<c then a<c, it's obvious – Hinweis: keine Verwendung erforderlich &apos; fliehen ' Charakter.

Wenn Sie Attributwerte in einfache Anführungszeichen setzen (') dann sollten Sie diese Zeichen maskieren:

' with &apos;
< with &lt;
& with &amp;

und du kannst schreiben " wie es ist. Flucht von > mit &gt; im Attributtext ist nicht nötigz.B <a b=">"/> ist wohlgeformtes XML.

  • Warum erfordert XML, dass Sonderzeichen innerhalb der Anführungszeichen bei Attributwerten maskiert werden? Nur ” oder ‘ müssten in Anführungszeichen gesetzt werden … und alles andere innerhalb dieser Zeichenfolge könnte einfach als Inhalt betrachtet werden!

    – Teddy

    16. April 2016 um 11:13 Uhr


  • Ich denke, es ist eine Vorsichtsmaßnahme gegen schlecht geschriebene XML-Parser und / oder falsches XML. Wenn beispielsweise Anführungszeichen für Attribute weggelassen werden (<tag attr=value></tag>).

    – izogfif

    20. September 2016 um 14:22 Uhr


  • Ich bin kein Experte, aber ich würde vermuten, dass dies eine historische Vorsichtsmaßnahme aufgrund von SGML ist, das ursprünglich zur Definition von HTML und anderen Markup-Sprachen verwendet wurde.

    – LMA1980

    24. November 2016 um 4:10 Uhr

  • Auch bei modernen Parsern ist das schließende Tag das Problem. Das Start-Tag gibt keinen Fehler.

    – Sortierer

    21. Dezember 2016 um 11:41 Uhr

  • Dies ist richtiger als die akzeptierte Antwort, da es den minimalen Satz notwendiger Escapes bereitstellt.

    – TToni

    27. April 2018 um 8:38 Uhr

1044220cookie-checkWie füge ich & hinzu, usw. in XML-Attributwerten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy