首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以控制在用MSXML6进行序列化时哪些标记会被折叠?

是否有一种方法可以控制在用MSXML6进行序列化时哪些标记会被折叠?
EN

Stack Overflow用户
提问于 2009-10-05 13:31:43
回答 2查看 808关注 0票数 3

我创建了一个MSXML6 DOM文档,在序列化期间,我想控制空元素是如何序列化的:

  1. <tag></tag>
  2. <tag/>

This answer描述了C#的解决方案,但我正在寻找MSXML的ActiveX接口可能的解决方案。(用于VB6或某些脚本语言)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-26 17:30:04

这是令人难以置信的混乱,但我已经发现,如果在MSXML文档上使用createElement方法,就会得到(出于某种原因)一个xml元素,该元素将序列化为<tag />格式,因此您可以使用您创建的同名元素来替换它们,从而强制元素像这样进行序列化:

代码语言:javascript
复制
<!-- Contents of c:\xml.xml -->
<xml>
    <element></element>
</xml>

在Javascript中(但希望很容易转换为VbScript )

代码语言:javascript
复制
objXML = new ActiveXObject("MSXML2.DOMDocument.4.0");
objXML.load("c:\\xml.xml");

var xmlElement = objXML.childNodes[1];

var newElement = objXML.createElement(xmlElement.childNodes[0].tagName);
xmlElement.replaceChild(newElement, xmlElement.childNodes[0]);

相反,可以通过将text属性设置为""来强制未展开的""元素展开。

代码语言:javascript
复制
newElement.text = "";

希望这会有所帮助--我知道这真的很可怕,但是你需要一开始就能做到这一点的可能性已经够可怕的了,所以这种额外的恐怖行为不会有多大的影响!

票数 2
EN

Stack Overflow用户

发布于 2009-10-12 18:43:18

应该不难创建一个COM包装器,向您的VB6应用程序公开必要的C#神奇功能。

代码语言:javascript
复制
using Interop=System.Runtime.InteropServices;

namespace MyNamespace
{
    [Interop.GuidAttribute("...guid here...")]
    [Interop.ComVisible(true)]
    [Interop.ClassInterface(Interop.ClassInterfaceType.AutoDispatch)]
    public partial class MyXmlWrapper 
    {
        // expose methods in here that do the XML serialization the 
        // way you want to.  
    }
}

如果您以前没有这样做过,那么在C#中定义COM对象似乎是异乎寻常的,但这并不难。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1520095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档