由于未定义的实体

时间:2017-09-05 15:33:00

标签: xml vb.net xslt

我正在尝试使用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>&copy; 2017 Copyright Owner</copyright-statement>
</permissions>

它失败了“引用未定义的实体'复制'。”

我无法控制传入的XML - 我必须使用我给出的内容 - 所以有没有办法强制load方法停止检查文件的内容?

1 个答案:

答案 0 :(得分:0)

我发现了一种基于Alex K建议的方法。它感觉相当粗糙,但它做了我需要它做的事情,所以也许对其他使用不完美输入的人有帮助?

首先将整个XML文件读入一个字符串,然后运行以下命令:

inString = System.Web.HttpUtility.HtmlEncode(inString)
inString = Replace(inString, "&lt;", "<")
inString = Replace(inString, "&gt;", ">")
inString = Replace(inString, "&quot;", """")

inDoc.loadXML(inString)
outString = inDoc.transformNode(xsl)
outString = System.Web.HttpUtility.HtmlDecode(outString)

然后将outString写入文件。