Javascript 如何使用缩进保存MSXML2.dom文档?(我认为它使用MXXMLWriter)
我有一个MSXML2.DomDocument的实例 我挥手保存它,缩进 此代码有效,但不缩进:Javascript 如何使用缩进保存MSXML2.dom文档?(我认为它使用MXXMLWriter),javascript,jscript,wsh,msxml6,Javascript,Jscript,Wsh,Msxml6,我有一个MSXML2.DomDocument的实例 我挥手保存它,缩进 此代码有效,但不缩进: var dom = new ActiveXObject("MSXML2.DomDocument"); // fiddle with dom here dom.save(filename); 我想我可以使用MXXMLWriter对象来注入缩进 怎么做 应该这样做 function saveDomWithIndent(dom, filename) { var writer = new Acti
var dom = new ActiveXObject("MSXML2.DomDocument");
// fiddle with dom here
dom.save(filename);
我想我可以使用MXXMLWriter对象来注入缩进
怎么做 应该这样做
function saveDomWithIndent(dom, filename) {
var writer = new ActiveXObject("MSXML2.MXXMLWriter"),
reader = new ActiveXObject("MSXML2.SAXXMLReader"),
fso = new ActiveXObject("Scripting.FileSystemObject"),
textStream = fso.CreateTextFile(filename, true);
writer.indent = true;
writer.omitXMLDeclaration = true;
reader.contentHandler = writer;
reader.parse(dom);
textStream.Write(writer.output);
textStream.Close();
}
像这样使用它:
var root, node, newnode,
dom = new ActiveXObject("MSXML2.DOMDocument.6.0");
dom.async = false;
dom.resolveExternals = false;
dom.load(fullpath);
root = dom.documentElement;
node = root.selectSingleNode("/root/node1");
if (node !== null) {
newnode = dom.createElement('node2');
newnode.text = "hello";
root.appendChild(newnode);
saveDomWithIndent(dom, fullpath);
}
我不知道如何调整缩进级别。它总是用制表符缩进 还有另一种美化xml输出的方法,另外还可以手动调整缩进级别:XSL
var adSaveCreateOverWrite=2
var Indent=新的ActiveXObject(“MSXML2.DomDocument”);
Indent.async=false;
Indent.resolveExternals=false;
load(“Indent.xsl”);
var Doc=新的ActiveXObject(“MSXML2.DomDocument”);
Doc.async=false;
Doc.resolveExternals=false;
Doc.load(“dirty.xml”);
使用(新的ActiveXObject(“ADODB.Stream”)){
Charset=“utf-8”;
Open();
WriteText(文档转换节点(缩进));
SaveToFile(“pretty.xml”,adSaveCreateOverWrite);
Close();
}
indent.xsl
;
;
如果不想使用xsl,可以插入VBCRLF。
每个“>”都应该跟在vbcrlf后面,除非“>”后面跟一个数字。然后从该字符串创建新的xml文件-现在它有了新行和缩进。
msaccess vba:
Dim objDom As DOMDocument
Set objDom = CreateObject("MSXML2.DOMDocument")
使用objDom.append创建文档,然后使用字符串(我的xml只有数字):
ss=objectDom.XML
对于i=1至Len(ss)
c=Mid(ss,i,1)
如果InStr(1,Mid(ss,i,1),“>”>0,则
a=Asc(中间(ss,i+1,1))
如果a<48或a>57,则
ss1=Mid(ss,1,i)
ss2=Mid(不锈钢,i+1,透镜(不锈钢))
ss=Mid(ss,1,i)和vbCrLf&Mid(ss,i+1,Len(ss))
如果结束
如果结束
接下来我
objDom.loadxmlss
保存(文件路径)
不错。这就引出了下面的问题——我可以使用内置XSL(msxml6.dll中嵌入的XSL表之一)来执行缩进吗?我想有必要以编程方式提取XSL,然后应用它。@非常抱歉,我不完全理解您的意思。实际上,我正在使用freethreadedomdocument
实例作为静态对象,它存储在应用程序作用域中(在Application\u OnStart
事件上初始化)。这可以防止每次转换的重复事务。我知道这是一个过时的评论流,但是。。。为了解释我之前的意思:我认为msxml至少包含一个内置XSLT。看,我问的原因是,如果我可以使用内置xslt,而不是嵌入自己的自定义工作表,那会更简单。@Cheeso抱歉,我终于明白了。是的,那太好了。谢谢问题是关于js(var vs dim)。。。在VBA中考虑使用选项显式。以下内容对我很有帮助,以防其他人正在寻找它:
ss = objectDom.XML
For i = 1 To Len(ss)
c = Mid(ss, i, 1)
If InStr(1, Mid(ss, i, 1), ">") > 0 Then
a = Asc(Mid(ss, i + 1, 1))
If a < 48 Or a > 57 Then
ss1 = Mid(ss, 1, i)
ss2 = Mid(ss, i + 1, Len(ss))
ss = Mid(ss, 1, i) & vbCrLf & Mid(ss, i + 1, Len(ss))
End If
End If
Next i
objDom.loadXML ss
objDom.Save (file_path)