我创建了一个MSXML6 DOM文档,在序列化期间,我想控制空元素是如何序列化的:
<tag></tag> <tag/>This answer描述了C#的解决方案,但我正在寻找MSXML的ActiveX接口可能的解决方案。(用于VB6或某些脚本语言)
发布于 2009-10-26 17:30:04
这是令人难以置信的混乱,但我已经发现,如果在MSXML文档上使用createElement方法,就会得到(出于某种原因)一个xml元素,该元素将序列化为<tag />格式,因此您可以使用您创建的同名元素来替换它们,从而强制元素像这样进行序列化:
<!-- Contents of c:\xml.xml -->
<xml>
<element></element>
</xml>在Javascript中(但希望很容易转换为VbScript )
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属性设置为""来强制未展开的""元素展开。
newElement.text = "";希望这会有所帮助--我知道这真的很可怕,但是你需要一开始就能做到这一点的可能性已经够可怕的了,所以这种额外的恐怖行为不会有多大的影响!
发布于 2009-10-12 18:43:18
应该不难创建一个COM包装器,向您的VB6应用程序公开必要的C#神奇功能。
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对象似乎是异乎寻常的,但这并不难。
https://stackoverflow.com/questions/1520095
复制相似问题