如果<;,则在VBScript中的DOM XML解析器中加载HTML文档失败;!DOCTYPE html>;标签存在
我目前正在尝试使用VBScript对HTML文件执行批处理修改。为此,我使用了Microsoft.XMLDOM对象。无法将我的HTML文件作为XML文档加载。经过一些实验,似乎第一行的以下标签是罪魁祸首:如果<;,则在VBScript中的DOM XML解析器中加载HTML文档失败;!DOCTYPE html>;标签存在,xml,vbscript,xmldom,Xml,Vbscript,Xmldom,我目前正在尝试使用VBScript对HTML文件执行批处理修改。为此,我使用了Microsoft.XMLDOM对象。无法将我的HTML文件作为XML文档加载。经过一些实验,似乎第一行的以下标签是罪魁祸首: <!DOCTYPE html> 它在这一行失败: Set objNodes = objDoc.selectNodes("//title") 这是错误消息: Microsoft VBScript runtime error: Object required: 'objDoc'
<!DOCTYPE html>
它在这一行失败:
Set objNodes = objDoc.selectNodes("//title")
这是错误消息:
Microsoft VBScript runtime error: Object required: 'objDoc'
如果我删除了它试图读取的文档顶部的标记,代码就会执行我期望的操作,因此我知道问题在于,该标记会使它认为该文件不是XML文档 首先,您可以通过在加载后添加一些错误检查来缩小问题的原因:
objXMLDoc.load(strFilePath)
If objXMLDoc.parseError.errorCode <> 0 Then
MsgBox "ERROR when loading " + strFileName + ": " + objXMLDoc.parseError.reason
End If
加载前,检测到DTD
错误将不再发生
您很可能还需要添加行
objXMLDoc.setProperty "ProhibitDTD", False
objXMLDoc.validateOnParse = False
在加载之前,如果您的HTML文件不包含完整的HTML DTD(通常不包含)
总而言之,以下是完整的代码:
strFilePath = "C:\Temp\test.html"
Set objXMLDoc = CreateObject("Msxml2.DOMDocument.6.0")
objXMLDoc.Async = False
objXMLDoc.setProperty "ProhibitDTD", False
objXMLDoc.validateOnParse = False
objXMLDoc.load(strFilePath)
If objXMLDoc.parseError.errorCode <> 0 Then
MsgBox "ERROR when loading " + strFileName + ": " + objXMLDoc.parseError.reason
End If
Set objDoc = objXMLDoc.documentElement
MsgBox TypeName(objDoc)
Set objNodes = objDoc.selectNodes("//title")
MsgBox objNodes.Length
strFilePath=“C:\Temp\test.html”
设置objXMLDoc=CreateObject(“Msxml2.DOMDocument.6.0”)
objXMLDoc.Async=False
objXMLDoc.setProperty“ProhibitDTD”,False
objXMLDoc.validateOnParse=False
objXMLDoc.load(strFilePath)
如果objXMLDoc.parseError.errorCode为0,则
MsgBox“加载时出错”+strFileName+:“+objXMLDoc.parseError.reason
如果结束
设置objDoc=objXMLDoc.documentElement
MsgBox类型名(objDoc)
设置objNodes=objDoc.selectNodes(//title)
MsgBox长方体。长度
它可以成功加载和解析此文件:
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
The content of the document......
</body>
</html>
文件标题
文件的内容。。。。。。
最后一行将输出“1”,因为只有一个标记
但是,请注意,有一个缺点:HTML不是XML!
也就是说,并非每个HTML文件都是格式良好的XML文件。
例如,如果在上述示例HTML文件中有一个
标记(不匹配
),则加载将失败。
使用上述方法只能打开符合XML的HTML文件。首先,您可以通过在加载后添加一些错误检查来缩小问题的原因:
objXMLDoc.load(strFilePath)
If objXMLDoc.parseError.errorCode <> 0 Then
MsgBox "ERROR when loading " + strFileName + ": " + objXMLDoc.parseError.reason
End If
加载前,检测到DTD
错误将不再发生
您很可能还需要添加行
objXMLDoc.setProperty "ProhibitDTD", False
objXMLDoc.validateOnParse = False
在加载之前,如果您的HTML文件不包含完整的HTML DTD(通常不包含)
总而言之,以下是完整的代码:
strFilePath = "C:\Temp\test.html"
Set objXMLDoc = CreateObject("Msxml2.DOMDocument.6.0")
objXMLDoc.Async = False
objXMLDoc.setProperty "ProhibitDTD", False
objXMLDoc.validateOnParse = False
objXMLDoc.load(strFilePath)
If objXMLDoc.parseError.errorCode <> 0 Then
MsgBox "ERROR when loading " + strFileName + ": " + objXMLDoc.parseError.reason
End If
Set objDoc = objXMLDoc.documentElement
MsgBox TypeName(objDoc)
Set objNodes = objDoc.selectNodes("//title")
MsgBox objNodes.Length
strFilePath=“C:\Temp\test.html”
设置objXMLDoc=CreateObject(“Msxml2.DOMDocument.6.0”)
objXMLDoc.Async=False
objXMLDoc.setProperty“ProhibitDTD”,False
objXMLDoc.validateOnParse=False
objXMLDoc.load(strFilePath)
如果objXMLDoc.parseError.errorCode为0,则
MsgBox“加载时出错”+strFileName+:“+objXMLDoc.parseError.reason
如果结束
设置objDoc=objXMLDoc.documentElement
MsgBox类型名(objDoc)
设置objNodes=objDoc.selectNodes(//title)
MsgBox长方体。长度
它可以成功加载和解析此文件:
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
The content of the document......
</body>
</html>
文件标题
文件的内容。。。。。。
最后一行将输出“1”,因为只有一个标记
但是,请注意,有一个缺点:HTML不是XML!
也就是说,并非每个HTML文件都是格式良好的XML文件。
例如,如果在上述示例HTML文件中有一个
标记(不匹配
),则加载将失败。
使用上述方法只能打开符合XML的HTML文件。
Microsoft.XMLDOM
不推荐使用,请改用Msxml2.DOMDocument.6.0
。有关代码的进一步帮助:请显示您的代码。请回答您的问题并添加代码!我已经添加了我的代码。@AnsgarWiechers我只是尝试将代码加载到Msxml2.DOMDocument.6.0对象中,但不幸的是,这没有什么区别。谢谢。Microsoft.XMLDOM
已被弃用,请改用Msxml2.DOMDocument.6.0
。有关代码的进一步帮助:请显示您的代码。请回答您的问题并添加代码!我已经添加了我的代码。@AnsgarWiechers我只是尝试将代码加载到Msxml2.DOMDocument.6.0对象中,但不幸的是,这没有什么区别。谢谢,谢谢。这正是我所需要的。您知道我在哪里可以找到setProperty方法及其可用属性的引用吗?我使用的是以下网站,它似乎没有这些信息:而且,我确实在冒险用XML解析器处理HTML文件。我将研究创建自己的解析逻辑,因为我想要编写脚本的更改非常简单。谢谢您的建议。@Bluewoods的属性如中所述。谢谢。这正是我所需要的。您知道我在哪里可以找到setProperty方法及其可用属性的引用吗?我使用的是以下网站,它似乎没有这些信息:而且,我确实在冒险用XML解析器处理HTML文件。我将研究创建自己的解析逻辑,因为我想要编写脚本的更改非常简单。谢谢您的建议。@Bluewoods中描述了这些属性。