Во-первых, вы можете сузить причину проблемы, добавив некоторые проверки ошибок после load
:
objXMLDoc.load(strFilePath)
If objXMLDoc.parseError.errorCode <> 0 Then
MsgBox "ERROR when loading " + strFileName + ": " + objXMLDoc.parseError.reason
End If
(В зависимости от вашей среды VBScript вам, возможно, придется использовать что-то другое, чем MsgBox
.)
Возможно, вы получите сообщение об ошибке
ошибка: DTD запрещен.
Причина в том, что загрузка синтаксиса DTD (например, !DOCTYPE
) по умолчанию запрещена в MSXML 6.0.
Подробнее см. Обзор безопасности MSXML . Вот соответствующая часть
Некоторые части XML (такие как DTD и встроенные схемы) по своей природе рискованны. В конфигурации установки по умолчанию MSXML 6.0 эти функции были отключены. Вы можете включить эти функции, но сначала убедитесь, что риски безопасности, связанные с ними, к вам не относятся.
Если вы попытаетесь загрузить DTD без явного включения свойства ProhibitDTD, вы получите следующую ошибку:
ошибка: DTD запрещен.
Если вы добавите строку
objXMLDoc.setProperty "ProhibitDTD", False
перед загрузкой ошибка DTD is probited
больше не будет возникать.
Скорее всего, вам также придется добавить строку
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
Он может успешно загрузить и проанализировать этот файл:
<!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-файла будет тег <br>
(без соответствия </br>
), загрузка завершится неудачно.
Только XML-файлы, совместимые с XML, могут быть открыты описанным выше способом.