我正在尝试使用VBA对XML输入运行XSLT转换。当我在Oxygen(使用Saxon)中运行它时,XSLT工作得很好,但目的是将其打包成一个没有Oxygen许可证的人可以使用的“一键式”可执行文件。
我的问题是DOMDocument.load步骤中的visual basic chokes和die。
以下是代码示例:
Dim inDoc = New MSXML.DOMDocument
inDoc.validateOnParse = False
inDoc.resolveExternals = False
inDoc.load([filepath here])
以下是XML的代表性内容:
<permissions>
<copyright-statement>© 2017 Copyright Owner</copyright-statement>
</permissions>
它失败了“引用未定义的实体'复制'。”
我无法控制传入的XML - 我必须使用我给出的内容 - 所以有没有办法强制load方法停止检查文件的内容?
答案 0 :(得分:0)
我发现了一种基于Alex K建议的方法。它感觉相当粗糙,但它做了我需要它做的事情,所以也许对其他使用不完美输入的人有帮助?
首先将整个XML文件读入一个字符串,然后运行以下命令:
inString = System.Web.HttpUtility.HtmlEncode(inString)
inString = Replace(inString, "<", "<")
inString = Replace(inString, ">", ">")
inString = Replace(inString, """, """")
inDoc.loadXML(inString)
outString = inDoc.transformNode(xsl)
outString = System.Web.HttpUtility.HtmlDecode(outString)
然后将outString写入文件。