首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用缩进保存MSXML2.DomDocument?(我认为它使用了MXXMLWriter)

如何使用缩进保存MSXML2.DomDocument?(我认为它使用了MXXMLWriter)
EN

Stack Overflow用户
提问于 2012-06-22 02:11:09
回答 3查看 10.2K关注 0票数 9

我有一个MSXML2.DomDocument实例。

我挥手表示要保存它,并进行缩进。

此代码可以工作,但不缩进:

代码语言:javascript
复制
var dom = new ActiveXObject("MSXML2.DomDocument");
// fiddle with dom here
dom.save(filename);

我想我可以使用MXXMLWriter对象来注入缩进。

多么?

EN

回答 3

Stack Overflow用户

发布于 2012-06-30 01:23:33

还有另一种方法可以美化输出,另外还可以手动调整缩进级别:XSL

代码语言:javascript
复制
var adSaveCreateOverWrite = 2
var Indent = new ActiveXObject("MSXML2.DomDocument");
    Indent.async = false;
    Indent.resolveExternals = false;
    Indent.load("indent.xsl");
var Doc = new ActiveXObject("MSXML2.DomDocument");
    Doc.async = false;
    Doc.resolveExternals = false;
    Doc.load("dirty.xml");
with(new ActiveXObject("ADODB.Stream")){
    Charset = "utf-8";
    Open();
    WriteText(Doc.transformNode(Indent));
    SaveToFile("pretty.xml", adSaveCreateOverWrite);
    Close();
}

indent.xsl

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-15"?>
<!-- http://x443.wordpress.com/2011/page/34/ -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml"/>

  <xsl:template match="@*">
    <xsl:copy/>
  </xsl:template>

  <xsl:template match="text()">
    <xsl:value-of select="normalize-space(.)" />
  </xsl:template>

  <xsl:template match="*">
    <xsl:param name="indent" select="''"/>
    <xsl:text>&#xa;</xsl:text>
    <xsl:value-of select="$indent" />
    <xsl:copy>
      <xsl:apply-templates select="@*|*|text()">
        <xsl:with-param name="indent" select="concat($indent, '  ')"/>
      </xsl:apply-templates>
    </xsl:copy>
    <xsl:if test="count(../*)>0 and ../*[last()]=.">
      <xsl:text>&#xa;</xsl:text>
      <xsl:value-of select="substring($indent,3)" />
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>
票数 1
EN

Stack Overflow用户

发布于 2022-01-26 09:10:32

有点太复杂了??

不适用于我(在WSH /c脚本中)-错误和空文件。

然后发现您可以使用保存方法-我的新过滤器输出VS (空) C++过滤器脚本

代码语言:javascript
复制
var arg = WScript.arguments(0);
var doc = readFile(arg);
var xml = doc.documentElement.firstChild;
do {
    var filters = {};
    while (xml && xml.nodeName != "ItemGroup") xml = xml.nextSibling;
    if (!xml) break;
    var xml2 = xml.firstChild;
    while (xml2 && (xml2.nodeName == "ClInclude" || xml2.nodeName == "ClCompile"))
    {
        var path = xml2.attributes.getNamedItem("Include").nodeValue;
        var filter = xml2.firstChild;
        if (filter != null) {
            filter = filter.text;
        }
        if (filters[path])
        { //WScript.Echo(path + " had " + filter);
            if (!filter)
            {
                var prev = xml2.previousSibling;
                xml.removeChild(xml2);
                xml2 = prev;
            }
        } else {
            if (filter != null) {
                filters[path] = filter;
            }
        }
        xml2 = xml2.nextSibling;
    }
    xml = xml.nextSibling;
} while (xml);
doc.save(arg);

function readFile(filename)
{
    var xml = new ActiveXObject("Msxml2.DOMDocument.6.0");  
    xml.async = false;
    xml.resolveExternals = false;
    xml.async = false;
    xml.load(arg);
    return xml;
}
票数 0
EN

Stack Overflow用户

发布于 2014-06-24 16:42:01

如果不想使用xsl,只需插入vbcrlfs即可。每个">“都应该跟在vbcrlf后面,除非">”后面跟一个数字。然后从该字符串创建新的xml文件-现在它有了新的行和缩进。msaccess vba:

代码语言:javascript
复制
Dim objDom As DOMDocument
Set objDom = CreateObject("MSXML2.DOMDocument")

使用objDom.append创建文档,然后使用字符串(我的xml只有数字):

代码语言:javascript
复制
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)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11144192

复制
相关文章

相似问题

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