it-swarm.com.de

Zeilenumbruch in XML?

Ich bin ein Anfänger in der Webentwicklung und versuche, Zeilenumbrüche in meine XML-Datei einzufügen .. _ So sieht mein XML aus:

<musicpage>
   <song>
      <title>Song Title</title>
      <lyric>Lyrics</lyric>
   </song>

    <song>
      <title>Song Title</title>
      <lyric>Lyrics</lyric>
   </song>

    <song>
      <title>Song Title</title>
      <lyric>Lyrics</lyric>
   </song>

    <song>
      <title>Song Title</title>
      <lyric>Lyrics</lyric>
   </song>
</musicpage>

Ich möchte Zeilenumbrüche zwischen den Sätzen für die Texte haben. Ich habe alles aus/n ausprobiert, & # xD; und andere ähnliche Codes, PHP, Parsing usw., und nichts funktioniert! Ich habe schon seit Stunden online gegoogelt und scheint die Antwort nicht zu finden. Ich verwende XML, um mithilfe von Javascript Daten in eine HTML-Seite einzufügen.

Weiß jemand, wie man dieses Problem löst?

Dies ist der JS-Code, den ich zum Einfügen der XML-Daten in die HTML-Seite verwendet habe:

<script type="text/javascript">

    if (window.XMLHttpRequest) {
    xhttp=new XMLHttpRequest();
} else {
    xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET","xml/musicpage_lyrics.xml",false);
xhttp.send("");
xmlDoc=xhttp.responseXML;

var x=xmlDoc.getElementsByTagName("songs");
for (i=0;i<x.length;i++) {
    document.write("<p class='msg_head'>");
    document.write(x[i].getElementsByTagName("title")[0].childNodes[0].nodeValue);
    document.write("</p><p class='msg_body'>");
    document.write(x[i].getElementsByTagName("lyric")[0].childNodes[0].nodeValue);
    document.write("</p>");
}
</script>
18
ew89

@icktoofay war nahe an der CData

<myxml>
    <record>
        <![CDATA[
        Line 1 <br />
        Line 2 <br />
        Line 3 <br />
        ]]>
    </record>
</myxml>
25
Chase Florell

In XML ist ein Zeilenumbruch ein normales Zeichen. Du kannst das:

<xml>
  <text>some text
with
three lines</text>
</xml>

und der Inhalt von <text> wird sein

 etwas Text 
 mit 
 drei Zeilen 

Wenn dies für Sie nicht funktioniert, machen Sie etwas falsch. Spezielle "Problemumgehungen" wie das Kodieren des Zeilenumbruchs sind nicht erforderlich. Dinge wie \n funktionieren dagegen nicht, da XML keine Escape-Sequenzen hat*.


* Beachten Sie, dass &#xA; die Zeichenentität ist, die einen Zeilenumbruch in serialized XML darstellt. "XML hat keine Escape-Sequenzen" bezeichnet die Situation, wenn Sie mit einem DOM-Dokument interagieren und Knotenwerte über die DOM-API festlegen.

Hier funktionieren weder &#xA; noch Dinge wie \n, sondern ein actual newline-Zeichen. Wie dieses Zeichen im serialisierten Dokument (d. H. "Datei") endet, hängt von der API ab und sollte Sie nicht betreffen.


Da Sie sich fragen, wo sich Ihre Zeilenumbrüche in HTML befinden, werfen Sie einen Blick in Ihren Quellcode. HTML ignoriert Zeilenumbrüche im Quellcode. Verwenden Sie <br>-Tags, um Zeilenumbrüche auf dem Bildschirm zu erzwingen. 

Hier ist eine JavaScript-Funktion, die <br> in eine mehrzeilige Zeichenfolge einfügt:

function nl2br(s) { return s.split(/\r?\n/).join("<br>"); }

Alternativ können Sie Zeilenumbrüche bei neuen Zeilenzeichen mit CSS erzwingen:

div.lines {
    white-space: pre-line;
}
22
Tomalak

Fügen Sie am Ende Ihrer Zeilen einfach das folgende Sonderzeichen ein: &#xD;

Dieses Sonderzeichen definiert das Wagenrücklaufzeichen.

7
KushalP

verwenden Sie einfach &lt;br&gt; am Ende Ihrer Zeilen.

3
Abolfazl Beigi

In XML: Verwenden Sie wörtliche Zeilenumbrüche, da wird nichts anderes benötigt.

Die Zeilenumbrüche bleiben erhalten, damit Javascript sie lesen kann [1]. Beachten Sie, dass auch Einrückungs-Leerzeichen und vorangestellte oder nachfolgende Zeilenumbrüche beibehalten werden (der Grund, warum Sie diese nicht sahen, ist, dass HTML/CSS Leerzeichen standardmäßig in einzelne Leerzeichen zerlegt).

Dann ist der einfachste Weg: Im HTML: nichts tun, nur CSS verwenden, um die Zeilenumbrüche zu erhalten

.msg_body {
    white-space: pre-line;
}

Dadurch werden jedoch auch Ihre zusätzlichen Zeilen aus dem XML-Dokument beibehalten. Dies funktioniert nicht in IE 6 oder 7 [2].

Räumen Sie das Leerzeichen also selbst auf. Dies ist eine Möglichkeit, es zu tun (Zeilenumbrüche für Klarheit - Javascript ist mit oder ohne sie zufrieden [3]) [4]

[get lyric...].nodeValue
    .replace(/^[\r\n\t ]+|[\r\n\t ]+$/g, '')
    .replace(/[ \t]+/g, ' ')
    .replace(/ ?([\r\n]) ?/g, '$1')

und dann bewahren Sie diese Zeilenumbrüche mit

.msg_body {
    white-space: pre; // for IE 6 and 7
    white-space: pre-wrap; // or pre-line
}

oder fügen Sie anstelle dieses CSS ein .replace(/\r?\n/g, '<br />') nach den anderen JavaScript .replaces hinzu.

(Randnotiz: Eine solche Verwendung von document.write () ist ebenfalls nicht ideal und manchmal anfällig für Cross-Site-Scripting-Angriffe. Dies ist jedoch ein anderes Thema. In Bezug auf diese Antwort möchten Sie die Variante verwenden, die durch <br> ersetzt wird muss <, & (, >, ", ') , bevor der <br>s generiert wird.)

-

[1] Referenz: Abschnitte "Element White Space Handling" und "XML Schema White Space Control" http://www.usingxml.com/Basics/XmlSpace#ElementWhiteSpaceHandling

[2] http://www.quirksmode.org/css/whitespace.html

[3] mit Ausnahme einiger Stellen in der Javascript-Syntax, an denen das Einfügen von Semikolons besonders ärgerlich ist.

[4] Ich habe es geschrieben und diese regulären Ausdrücke in Linux Node.js getestet (das dieselbe Javascript-Engine wie Chrome, "V8", verwendet). Es besteht ein geringes Risiko, dass einige Browser reguläre Ausdrücke anders ausführen. (Mein Teststring (in Javascript-Syntax) "\n\nfoo bar baz\n\n\tmore lyrics \nare good\n\n")

3
idupree
<song>
  <title>Song Tigle</title>
  <lyrics>
    <line>The is the very first line</line>
    <line>Number two and I'm still feeling fine</line>
    <line>Number three and a pattern begins</line>
    <line>Add lines like this and everyone wins!</line>
  </lyrics>
</song>

(Gesungen nach Home on the Range )

Wenn es meins wäre, würde ich die Refrains und Verse ebenfalls in XML-Elemente einwickeln.

2
Robusto

Wenn Sie CDATA verwenden, können Sie die Zeilenumbrüche direkt in das XML einbetten, denke ich. Beispiel:

<song>
    <title>Song Title</title>
    <lyric><![CDATA[Line 1
Line 2
Line 3]]></lyric>
</song>
1
icktoofay
<description><![CDATA[first line<br/>second line<br/>]]></description>
1
sohaib

Wenn Sie CSS zum Stilisieren verwenden (nicht empfohlen.), Können Sie display:block; verwenden. Dies wird jedoch nur die Zeilenumbrüche before und after des styled-Elements enthalten. 

0
Ben