Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果<;,则在VBScript中的DOM XML解析器中加载HTML文档失败;!DOCTYPE html>;标签存在_Xml_Vbscript_Xmldom - Fatal编程技术网

如果<;,则在VBScript中的DOM XML解析器中加载HTML文档失败;!DOCTYPE html>;标签存在

如果<;,则在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'

我目前正在尝试使用VBScript对HTML文件执行批处理修改。为此,我使用了Microsoft.XMLDOM对象。无法将我的HTML文件作为XML文档加载。经过一些实验,似乎第一行的以下标签是罪魁祸首:

<!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中描述了这些属性。