XML中的换行符?

时间:2010-06-06 23:07:37

标签: html xml parsing line break

我是网络开发的初学者,我正在尝试在我的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>

9 个答案:

答案 0 :(得分:25)

@icktoofay与CData关系密切。

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

答案 1 :(得分:22)

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

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

<text>的内容将是

some text
with
three lines

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


* 请注意,&#xA;是表示序列化 XML中的换行符的字符实体。 “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;
}

答案 2 :(得分:7)

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

该特殊字符定义了回车符。

答案 3 :(得分:3)

在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,在其他JavaScript .replace(/\r?\n/g, '<br />')之后添加.replace

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

-

[1] reference:“Element White Space Handling”和“XML Schema White Space Control”http://www.usingxml.com/Basics/XmlSpace#ElementWhiteSpaceHandling

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

[3]除了Javascript语法中的一些地方,其分号插入特别烦人。

[4]我在Linux Node.js中编写并测试了这些正则表达式(使用与Chrome相同的Javascript引擎,“V8”)。某些浏览器执行regexp的风险很小。 (我的测试字符串(用javascript语法)"

答案 4 :(得分:3)

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

答案 5 :(得分: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>

(在范围上演唱 Home

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

答案 6 :(得分:1)

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

<song>
    <title>Song Title</title>
    <lyric><![CDATA[Line 1
Line 2
Line 3]]></lyric>
</song>

答案 7 :(得分:1)

<description><![CDATA[first line<br/>second line<br/>]]></description>

答案 8 :(得分:0)

如果您使用CSS进行样式设计(不推荐。),您可以使用display:block;,但是,这只会在之前为提供换行符之后风格元素。