我需要在另一个xml文档中嵌入一个格式正确的xml文档。但是,我宁愿避免使用CDATA(个人厌恶),也希望避免因为浪费时间解析嵌入式xml而收到整个文档的解析器。嵌入式xml可能非常重要,我希望接收整个文件的代码将嵌入式xml视为任意数据。
立即想到的想法是在base64中编码嵌入式xml,或者压缩它。听起来不错吗?
顺便说一下,我在C#编码。
答案 0 :(得分:5)
您可以将XML转换为字节数组,然后将其转换为binary64格式。这将允许您将其嵌套在一个元素中,而不必使用CDATA。
答案 1 :(得分:4)
W3C批准的方式是XInclude。在。http://mvp-xml.sourceforge.net/xinclude/
有.Net的实现答案 2 :(得分:3)
只是一个快速的说明,我已经走了base64路线并且它工作得很好但它确实带来了严重的性能损失,特别是在大量使用的情况下。我们这样做的文档片段高达20MB,在base64编码后,它们可以占用65MB(带标签和数据),即使是压缩。
然而,更大的问题是.NET base64编码在执行编码/解码时可能会消耗高达10倍的内存,并且如果在多个线程上重复和/或完成,可能经常导致OOM异常。
有人在类似问题上建议ProtoBuf作为选项,并Fast InfoSet作为另一种选择。
答案 3 :(得分:3)
根据您构建XML的方式,一种方法是不关心它,让框架处理它。
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?><helloworld></helloworld>");
string xml = "<how><are><you reply=\"i am fine\">really</you></are></how>";
doc.GetElementsByTagName("helloworld")[0].InnerText = xml;
输出类似于HTMLEncoded字符串:
<?xml version="1.0" encoding="utf-8"?>
<helloworld><how><are><you
reply="i am fine">really</you></are></how>
</helloworld>
答案 4 :(得分:1)
我会用你最喜欢的方式对它进行编码(例如base64或HttpServerUtility :: UrlEncode,...)然后嵌入它。
答案 5 :(得分:1)
如果您不需要xml声明(文档的第一行),只需将根元素(包含所有子元素)作为现有元素的子元素插入到另一个xml文档的树中。使用不同的命名空间来分隔插入的元素。
答案 6 :(得分:0)
似乎serialization是推荐的方法。
答案 7 :(得分:0)
你不能使用XSLT吗?也许使用xsl:copy或xsl:copy-of?这就是XSLT的用途。
答案 8 :(得分:-1)
我为此使用评论:
&lt;! - 您的xml文字 - &gt;
[EDITED]
如果嵌入的xml带有注释,请用不同的语法替换它。
<?xml version="1.0" encoding="iso-8859-1" ?> <xml> <status code="0" msg="" cause="" /> <data> <order type="07" user="none" attrib="..." > <xmlembeded > <!-- <?xml version="1.0" encoding="iso-8859-1" ?> <xml> <status ret="000 "/> <data> <allxml_here /> <!** embedeb comments **> </data> <xml> --> </xmlembeded > </order> <context sessionid="12345678" scriptname="/from/..." attrib="..." /> </data> </xml>