热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将xml/CDATA嵌套到xml文件中?-Nestingxml/CDATAintoaxmlfile?

Ineedtoputaratherlargexmlfileintoanotherxmlfile.IconsideredusingCDATAforthis:我需要将

I need to put a rather large xml file into another xml file. I considered using CDATA for this:

我需要将一个相当大的xml文件放入另一个xml文件中。我考虑过使用CDATA:

http://www.w3.org/TR/2000/REC-xml-20001006#sec-cdata-sect http://www.w3schools.com/xml/xml_cdata.asp

but since my xml might also contain CDATA this does not work unless I do some nasty workaround:

但由于我的xml可能还包含CDATA,除非我做一些讨厌的解决方法,否则这不起作用:

http://web-design.blogs.webucator.com/2010/11/20/nesting-cdata-blocks/

Are there better ways of transferring/encoding large nested xml files or is the xml format simply not meant to be used in this way?

是否有更好的方法来传输/编码大型嵌套xml文件,或者xml格式是不是以这种方式使用?

5 个解决方案

#1


2  

Yes, in your top-most document make the CDATA section of data type bin.base64. That way even if the document you're wrapping contains a CDATA section, you're protected. As an added bonus, your application will also support binary files (images, spreadsheets, etc.).

是的,在最顶层的文档中,将数据类型为bin.base64的CDATA部分。这样,即使您正在包装的文档包含CDATA部分,您也会受到保护。作为额外的奖励,您的应用程序还将支持二进制文件(图像,电子表格等)。

Here's some code that does it, based on Microsoft ADO, and MSXML.

这是基于Microsoft ADO和MSXML的一些代码。

function wrapBinaryFile( strFileName)
{
    var ado_stream = new ActiveXObject("ADODB.Stream");
    var xml = newXMLDocument();
    xml.loadXML("");
    xml.documentElement.setAttribute( "name", strFileName );

    xml.documentElement.setAttribute("xmlns:dt","urn:schemas-microsoft-com:datatypes");

    xml.documentElement.dataType = "bin.base64";
    ado_stream.Type = 1; // 1=adTypeBinary
    ado_stream.Open();
    ado_stream.LoadFromFile( strFileName );
    xml.documentElement.nodeTypedValue = ado_stream.Read(-1); // -1=adReadAll
    ado_stream.Close();
    return xml;
}

And how to un-wrap it on the other end...

以及如何在另一端解开它......

function unwrapBinaryFile(ndFile, strFileName )
{
    var ado_stream = new ActiveXObject("ADODB.Stream");
    ndFile.dataType = "bin.base64";

    ado_stream.Type = 1; // 1=adTypeBinary
    ado_stream.Open();
    ado_stream.write( ndFile.nodeTypedValue );
    ado_stream.SaveToFile( strFileName, 2 );
    ado_stream.Close(); 
}

#2


4  

you can replace the inner ]] with ]]]]>

你可以用]]]]>

(based on http://web-design.blogs.webucator.com/2010/11/20/nesting-cdata-blocks/ )

(基于http://web-design.blogs.webucator.com/2010/11/20/nesting-cdata-blocks/)

Example: We have outer and inner docs and we want to put the inner inside the outer as CDATA.

示例:我们有外部和内部文档,我们希望将内部作为CDATA放在外部。


  
  
    ]]>



  
  
    ]]>
  

if we just copy and paste we get an invalid xml

如果我们只是复制和粘贴,我们会得到一个无效的xml


  
  
        
        
          ]]>
        
      
    ]]>

however, if we replace the inner ]] with ]]]]>

但是,如果我们用]]]]>


  
  
        
        
          ]]]]>
        
      
    ]]>

#3


2  

First XML :

第一个XML:


    
    
        test2
    

Second XML :

第二个XML:


    
    
        test4
    

You can include second XML in first with a specific node :

您可以首先在特定节点中包含第二个XML:


    
    
        test2
    
    
        
        
            test4
        
    

#4


1  

XML is hierarchic: why can't you nest the documents directly, without CDATA? Apart from DTD issues, any XML document can be copied as the content of an element in another document.

XML是层次结构的:为什么不能在没有CDATA的情况下直接嵌套文档?除了DTD问题之外,任何XML文档都可以作为另一个文档中元素的内容进行复制。

#5


0  

The short answer is that XML is not meant to be used in this way!

简短的回答是XML不应该以这种方式使用!

However, if you base64-encode the XML file to be packaged, the encoded result will not contain any characters which might be interpreted either as markup, or as entity references, and can safely be held as the contents of a text node.

但是,如果对要打包的XML文件进行base64编码,则编码结果将不包含任何可能被解释为标记或实体引用的字符,并且可以安全地保存为文本节点的内容。


推荐阅读
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
author-avatar
机加工N_918
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有