它是"不好做法"是敏感换行在XML文件?
-
08-06-2019 - |
题
我产生了一些XML文件和当它来到该地址的一部分,我已经片段,看起来是这样的:
<Address>15 Sample St
Example Bay
Some Country</Address>
XSLT,我已为转换到XHTML有一些时髦的递归模板转换newline内的字符串 <br /> 标记。
这是所有工作罚款;但是,它认为"不好做法"依赖换行在XML文件?如果是这样,它是建议我这么做呢?
<Address><Line>15 Sample St</Line>
<Line>Example Bay</Line>
<Line>Some Country</Line></Address>
好像这会很尴尬的包裹每一个地方在那里我的文字可能是多重线的标记像这样..
解决方案
它一般被认为是不良做法依靠换行,因为它是一个脆弱的方式区分的数据。虽然大多数XML处理器将保留任何空白,你把你的XML,它不能保证。
真正的问题是,大多数应用程序,输出XML成一个可读的格式考虑所有的空白在XML互换,并可能崩溃,那些换行进入一个单一的空间。这就是为什么你XSLT有跳过这样的篮球呈现的数据正确。使用"br"的标签将会大大简化的变换。
另一个潜在的问题是,如果你打开你的XML在XML文件的编辑和漂亮-它打印出来,你可能会丢失这些线断裂。
如果你继续使用换行,确保加xml:空间="保留"属性"地址"。 (你可以这样做在你的DTD,如果你使用一个。)
一些建议的读书
- 一个 文章XML.com 说下面的:
XML的应用程序往往似乎采取一个 傲慢的态度朝着空白 因为规则有关的地方 XML文档中的空白 不管有时得到这些 应用程序的自由增加或 删除的空白在某些地方。
其他提示
很少有人说,CDATA块会让你保留的线断裂。这是错误的。CDATA部分只会让标记的处理字数据,他们将 不 改变行处理。
<Address>15 Sample St
Example Bay
Some Country</Address>
是完全一样
<Address><![CDATA[15 Sample St
Example Bay
Some Country]]></Address>
唯一的区别是多么的不同Api报告这一点。
我认为唯一真正的问题是,它使XML更难于阅读。例如
<Something>
<Contains>
<An>
<Address>15 Sample St
Example Bay
Some Country</Address>
</An>
</Contains>
</Something>
如果漂亮XML不是一个问题,我可能会不用担心,只要作为它的工作。如果漂亮XML是一个问题,我会换的明确内容的行为 <br />
标记或 \n
之前嵌入他们在XML。
什么有关使用特性的数据存储,而不是文字节点:
<Address Street="15 Sample St" City="Example Bay" State="" Country="Some Country"/>
我知道的特性使用与文本节点是一个经常辩论的主题,但我已经坚持的属性在95%的时间,并没有任何麻烦,因为它。
这取决于你如何阅读和写作的XML。
如果XML是被自动地产生如果内容的行或明确
标志是正在分析成
-那就没什么好担心的。你输入可能没有任何其他XML在这所以这只是清洁的,不要惹XML。
如果标记目前正在努力与手动,它仍然吸尘器来只是有一线突破,如果你问我。
唯一的例外是如果您使用DOM得到一些结构的XML。在这种情况下线断裂是很明显邪恶,因为他们不代表状视图的正确。这听起来像状视图是无关紧要为你的应用,虽然如此,行符的声音足够了。
如果XML只是看起来不良(尤其是当自动产生的), 整洁 可以帮助,虽然它的工作更好地与HTML比XML。
这可能是一位具有欺骗性的例子中,由于地址是一位非标准化,在这种情况。它是一个合理的折衷,但是由于地址领域很难以正常化。如果你做的线断开展重要的信息,就是联合国正常化和制作邮局解释的意义的线断裂。
我要说的是,通常这不是一个大问题,但在这种情况下,我认为线标记是最正确的,因为它明确表明,你实际上没有解释什么线可能意味着在不同的文化。(记得,大多数形式对进入地址的邮政编码等,并解决线1和2。)
尴尬的具有行标记与正常XML,并且已经讨论了编码的恐怖。 http://www.codinghorror.com/blog/archives/001139.html
XML的规范具有什么要说的关于 空白 和 换行和运输特别是返回.所以如果你自己限制于真正的换行(x0A)你应该确定。然而,许多编辑工具将重新格式化,XML为"更好的表现",并可能摆脱的特殊的语法。一个更强大和更清洁的做法比"< 行>< /行>"的想法是要简单地使用的命名空间和嵌入XHTML的内容,例如:
<Address xmlns="http://www.w3.org/1999/xhtml">15 Sample St<br />Example Bay<br />Some Country</Address>
没有必要重新发明车轮,当它涉及到标准词汇。
我看不出这有什么错 <Line>
标记。
显然,可视化的数据对你很重要,重要,足以让它在你的数据(经线中断你的第一个例子)。罚款。然后真正地保留它,不要依靠"魔法",以保持它。保持每位的数据,你只需要以后,并不能推断出完全的保存部的数据,保持它甚至如果这可视化数据(线休息时间和其他格式).你的用户(最终用户的另一个开发商)花时间来格式的数据,他喜欢-告诉他(API doc/文附近输入)说你不打算保留它,或者只要保持它。
是的,我想用一个 CDATA 框会保护的空白。虽然有些分析器Api能让你保护空白。
什么你真的应该做的是变换你的XML格式保留了白-空间。
因此,而不是寻求取代 <br /> 你应该包裹的整个区块中的一个 <pre>
这样,你的地址在功能上是保留(是否包括行符或不)和XSTL可以选择是否要保留空白的结果。
我建议你应该加入 <br/>
线中断或可能使用的线断的实体 
如果你需要换行保存、使用CDATA块,作为 tweakt说
否则当心。大部分时间,换行将保留通过XML软件,但有时他们不会的,你真的不希望能依靠的东西只有工作的巧合