【问题标题】:store xml inside xml将 xml 存储在 xml 中
【发布时间】:2012-01-25 18:09:04
【问题描述】:

使用 OmniXML 包,是否可以将 XML 代码存储在另一个具有自己的 XML 数据的 XML 文件中?

像这样:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<data>
   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <otherxml>data</otherxml>
</data>

在标签数据里面,一切都应该是数据。是否存在阻止解析器将下一个数据解析为 XML 数据结构的转义字符?

或者 OmniXML 是否支持这种情况下的序列化?

也欢迎任何其他简单的想法。

【问题讨论】:

  • 你试过了吗?还是只是问能不能做?
  • 试过了,解析错误

标签: xml delphi xml-serialization delphi-2009 omnixml


【解决方案1】:

您可以使用 CDATA:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<data>
   <![CDATA[
   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <otherxml>data</otherxml>
   ]]>
</data>

请注意,当您获得 data 的值时,它将是一个字符串,因此您必须通过新的 XML 解析器运行它。

这里是一个omniXML的示例代码:

var
  xml:IXMLDocument;
  Node:IXMLNode;
begin
  xml := CreateXMLDoc;    
  xml.SelectSingleNode('/root/data',Node);
  ShowMessage(GetNodeCData(Node,'data',''));
end;

【讨论】:

  • 不需要运行,需要编写xml文件。
  • 请注意,可能存在编码问题。例如,如果嵌入的 xml 使用 ,而外部 xml 使用 UTF-8,则 XML 解析器仍必须将内部 xml 处理为 UTF-8。
【解决方案2】:

如果不需要直接读取数据中的内容,您可以将其编码为例如 Base64 或 UUEncode。

然后你就可以提取、解码和解析数据了

【讨论】:

  • 这绝对是一种困难(而且速度较慢)的方法,因为您仍然必须将编码文本存储在 CDATA 部分中。
  • 如果您的嵌入式 XML 也可能包含 CDATA,那么我认为您必须对其进行编码。由于这个原因,我会说这是首选方式。
  • @DarianMiller 似乎就在那里。
  • @Darian,好点子。很高兴我只是发表评论并没有投票。 :) 谢谢你提到 - 我错过了。
  • @Darian,可以“转义” CDATA 分隔符。 &lt;![CDATA[abcdef]]&gt;&lt;![CDATA[abc]]&gt;&lt;![CDATA[def]]&gt; 相同。使用这个事实,我们可以将字符串中的任何 ]]&gt; 实例拆分为两个 CDATA 块,因此它不会被用作分隔符。也就是说,只需将每次出现的]]&gt; 替换为]]]]&gt;&lt;[CDATA[&gt;
猜你喜欢
  • 2012-04-26
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多