私はWeb開発の初心者であり、XMLファイルに改行を挿入しようとしています。これが私のXMLの外観です。
<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>
歌詞の文の間に改行を入れたいです。/n、#xDからすべてを試しました。そして、それに類似した他のコード、PHP解析など、何も機能しません!何時間もオンラインでグーグルで答えを見つけられないようです。挿入にXMLを使用していますJavaScriptを使用してデータをHTMLページに追加します。
誰もこの問題を解決する方法を知っていますか?
これは、XMLデータをHTMLページに挿入するために使用したJSコードです。
<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>
@icktoofayはCDataに近かった
<myxml>
<record>
<![CDATA[
Line 1 <br />
Line 2 <br />
Line 3 <br />
]]>
</record>
</myxml>
XMLでは、改行は通常の文字です。あなたはこれを行うことができます:
<xml>
<text>some text
with
three lines</text>
</xml>
<text>
の内容は
一部のテキスト 3行
これがうまくいかない場合は、何か間違ったことをしていることになります。改行のエンコードなどの特別な「回避策」は不要です。一方、XMLにはエスケープシーケンスがないため、\n
のようなものは機能しません。*。
* 

はserialized XMLの改行を表す文字エンティティであることに注意してください。 「XMLにはエスケープシーケンスはありません」とは、DOMドキュメントを操作し、DOM APIを介してノード値を設定する状況を意味します。
これは

も\n
のようなものも動作しませんが、実際の改行文字は動作します。シリアル化されたドキュメント(つまり、「ファイル」)でこの文字がどのように終わるかは、APIに依存しており、関係ありません。
HTMLで改行がどこに行くのか不思議に思われるので、ソースコードを見てください。 HTMLはソースコードの改行を無視します。 <br>
タグを使用して、画面上で強制的に改行します。
以下は、<br>
を複数行の文字列に挿入するJavaScript関数です。
function nl2br(s) { return s.split(/\r?\n/).join("<br>"); }
または、CSSを使用して改行文字で強制的に改行することができます。
div.lines {
white-space: pre-line;
}
行の最後に、次の特殊文字を追加するだけです:
その特殊文字は、復帰文字を定義します。
単に<br>
行の最後。
XMLの場合:リテラルの改行を使用しますが、他には何も必要ありません。
改行は、JavaScriptがそれらを読み取るために保持されます[1]。インデントスペースと前後の改行も保持されることに注意してください(それらが表示されなかった理由は、HTML/CSSがデフォルトで空白を単一のスペース文字に折りたたむためです)。
その後、最も簡単な方法は次のとおりです。HTMLでは:何もしないで、CSSを使用して改行を保持します
_.msg_body {
white-space: pre-line;
}
_
ただし、これはXMLドキュメントの余分な行も保持するため、IE 6または7 [2]では機能しません。
したがって、空白を自分でクリーンアップしてください。これはそれを行う1つの方法です(わかりやすくするために改行しています-Javascriptはそれらの有無に関係なく[3])[4]
_[get lyric...].nodeValue
.replace(/^[\r\n\t ]+|[\r\n\t ]+$/g, '')
.replace(/[ \t]+/g, ' ')
.replace(/ ?([\r\n]) ?/g, '$1')
_
そして、それらの改行を保持します
_.msg_body {
white-space: pre; // for IE 6 and 7
white-space: pre-wrap; // or pre-line
}
_
または、そのCSSの代わりに、他のJavaScript _.replace
_ sの後に.replace(/\r?\n/g, '<br />')
を追加します。
(サイドノート:そのようなdocument.write()を使用することも理想的ではなく、クロスサイトスクリプティング攻撃に対して脆弱な場合がありますが、それは別の問題です。この答えに関連して、_<br>
_、エスケープする必要があります_<
_、_&
_(、_>
_、_"
_、_'
_)before _<br>
_ sを生成します。)
-
[1]参照:セクション「要素の空白処理」および「XMLスキーマの空白制御」 http://www.usingxml.com/Basics/XmlSpace#ElementWhiteSpaceHandling
[2] http://www.quirksmode.org/css/whitespace.html
[3]セミコロンの挿入が特に煩わしいJavascript構文のいくつかの場所を除きます。
[4]私はそれを書き、これらの正規表現をLinux Node.js(Chromeと同じJavascriptエンジン「V8」を使用)でテストしました。一部のブラウザでは正規表現が異なる方法で実行される小さなリスクがあります。 (私のテスト文字列(javascript構文)_"\n\nfoo bar baz\n\n\tmore lyrics \nare good\n\n"
_)
<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>
(Home on the Range)の曲に合わせて歌われる
私の場合は、コーラスと詩もXML要素でラップします。
CDATAを使用すると、改行をXMLに直接埋め込むことができると思います。例:
<song>
<title>Song Title</title>
<lyric><![CDATA[Line 1
Line 2
Line 3]]></lyric>
</song>
<description><![CDATA[first line<br/>second line<br/>]]></description>
スタイル設定にCSSを使用している場合(推奨されません。)display:block;
ただし、これにより、スタイルエレメントbeforeおよびafterのみが改行されます。