20

我是 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 中的所有内容,以及其他类似的代码,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>
4

9 回答 9

28

@icktoofay 与 CData 关系密切

<myxml>
    <record>
        <![CDATA[
        Line 1 <br />
        Line 2 <br />
        Line 3 <br />
        ]]>
    </record>
</myxml>
于 2010-06-06T23:45:01.273 回答
24

在 XML 中,换行符是一个普通字符。你可以这样做:

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

的内容<text>

一些文字
和
三行

如果这对您不起作用,那么您做错了什么。不需要像编码换行符这样的特殊“解决方法”。\n另一方面,类似的东西不起作用,因为 XML 没有转义序列*


*请注意,这是表示序列化XML&#xA;中的换行符的字符实体。“XML 没有转义序列”是指当您与 DOM 文档交互时,通过 DOM API 设置节点值的情况。

这既不是&#xA;也不是类似的东西\n都行不通,但实际的换行符会。这个字符如何在序列化文档(即“文件”)中结束取决于 API,您不必担心。


由于您似乎想知道 HTML 中的换行符在哪里:查看您的源代码,它们就在那里。HTML 忽略源代码中的换行符。使用<br>标签在屏幕上强制换行。

这是一个插入<br>多行字符串的 JavaScript 函数:

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

或者,您可以使用 CSS 在换行符处强制换行:

div.lines {
    white-space: pre-line;
}
于 2010-06-06T23:17:40.657 回答
7

在行尾,只需添加以下特殊字符:&#xD;

该特殊字符定义回车符。

于 2010-06-06T23:12:42.183 回答
7

只需&lt;br&gt;在行尾使用。

于 2013-02-02T09:11:07.437 回答
4

在 XML 中:使用文字换行符,那里不需要其他任何东西。

将保留换行符以供 Javascript 读取它们 [1]。请注意,任何缩进空格和前面或后面的换行符也被保留(您没有看到它们的原因是 HTML/CSS 默认情况下会将空格折叠成单个空格字符)。

那么最简单的方法是:在 HTML 中:什么都不做,只使用 CSS 来保留换行符

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

但这也保留了 XML 文档中的额外行,并且在 IE 6 或 7 [2] 中不起作用。

所以自己清理空白;这是一种方法(为了清楚起见,换行符 - 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,.replace(/\r?\n/g, '<br />')在其他 JavaScript 之后添加一个.replace

(旁注:像这样使用 document.write() 也不理想,有时容易受到跨站点脚本攻击,但这是另一个主题。关于这个答案,如果你想使用替换为的变体<br>,你' d 必须在生成s之前<转义, &(, >, ", ') 。)<br>

--

[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"

于 2011-10-22T17:43:05.873 回答
2
<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>

(随着《家在靶场上》的曲调演唱)

如果是我的,我也会将合唱和诗句包装在 XML 元素中。

于 2010-06-06T23:15:01.413 回答
1
<description><![CDATA[first line<br/>second line<br/>]]></description>
于 2013-06-05T08:34:08.500 回答
1

如果您使用 CDATA,您可以将换行符直接嵌入到我认为的 XML 中。例子:

<song>
    <title>Song Title</title>
    <lyric><![CDATA[Line 1
Line 2
Line 3]]></lyric>
</song>
于 2010-06-06T23:11:53.993 回答
0

如果您使用 CSS 来设置样式(不推荐。)您可以使用,但是,这只会在样式元素之前之后display:block;给您换行符。

于 2014-08-28T23:00:30.503 回答