MSXML 将默认的空 xmlns 添加到所有元素

MSXML adds default empty xmlns to all elements

提问人:Melonendk 提问时间:11/16/2023 更新时间:11/16/2023 访问量:42

问:

我需要从特定的 xsd 架构创建一个 XML,并使用 VBA 访问 MSXML2 库。到目前为止,我可以创建所有内容,但问题是 MSXML2 在根目录之后的字段上创建默认 xmlns,即使我指定了它。

我想要实现的目标:

<auditfile xmlns="urn:StandardAuditFile-Taxation-CashRegister:DK">
  <header>
  </header>
  <company>
  </company>
</auditfile>

我得到什么:

<auditfile xmlns="urn:StandardAuditFile-Taxation-CashRegister:DK">
  <header xmlns="">
  </header>
  <company xmlns="">
  </company>
</auditfile>

我有一个验证器,我可以检查一切正常,但是一旦xmlns=“”出现,我就说不。

我用于生成 xml 开头的代码是这样的。

Dim Document As Object
Set Document = CreateObject("MSXML2.DOMDocument.6.0")

Dim AuditRoot As Object
Set AuditRoot = Document.createElement("auditfile")
AuditRoot.setAttribute "xmlns", "urn:StandardAuditFile-Taxation-CashRegister:DK"
Document.appendChild AuditRoot

Set headerRoot = Document.createElement("header")
AuditRoot.appendChild headerRoot

Set companyRoot = Document.createElement("company")
AuditRoot.appendChild companyRoot

'Save the XML file
Document.Save "c:\Diamond\XML\SAT-T.xml"
'Set export to be c:\Diamond\XML\fil
MsgBox "File created at dafault location: C:\Diamond\XML\SAT-T.xml"

但如上所述,它不同。 那么,如果我可以禁用它,那么对一般有什么帮助吗?

XML VBA MS-访问 MSXML6

评论


答:

2赞 Yitzhak Khabinsky 11/16/2023 #1

最好使用 method 而不是 ..createNode().createElement()

它有 3 个参数,其中一个允许指定命名空间。

供参考:createNode 方法

我使用了 vbscript 语法,但您可以轻松地将其调整回 VBA。

VBScript

Dim Document
Set Document = CreateObject("MSXML2.DOMDocument.6.0")

Dim AuditRoot, NS
NS = "urn:StandardAuditFile-Taxation-CashRegister:DK"

Set AuditRoot = Document.createNode(1, "auditfile", NS)
Document.appendChild AuditRoot

Set headerRoot = Document.createNode(1, "header", NS)
AuditRoot.appendChild headerRoot

Set companyRoot = Document.createNode(1, "company", NS)
AuditRoot.appendChild companyRoot

'Save the XML file
Document.Save "c:\Diamond\XML\SAT-T.xml"
'Set export to be c:\Diamond\XML\fil
MsgBox "File created at dafault location: C:\Diamond\XML\SAT-T.xml"

输出

<auditfile xmlns="urn:StandardAuditFile-Taxation-CashRegister:DK">
    <header/>
    <company/>
</auditfile>

评论

0赞 Melonendk 11/17/2023
多谢!像魅力一样工作。效果更好,现在也可以实际使用验证器。