domParser.Process在lotus脚本中抛出Dom分析器操作失败

问题描述:

我需要使用lotus脚本从本地磁盘读取xml文件。 我在脚本库中添加了代码并从笔记视图中调用。domParser.Process在lotus脚本中抛出Dom分析器操作失败

origXML = "d:\dxl\xmldom.xml" 
    outputFile = "d:\dxl\DOMtree.txt" 

    On Error Goto errh 

    Set session = New NotesSession  
    Set db = session.CurrentDatabase 

    'create the output file 
    Set outputStream =session.CreateStream 
    outputStream.Open (outputFile) 
    outputStream.Truncate 

    Set inputStream = session.CreateStream 
    inputStream.Open (origXML) 

    'create DOM parser and process 
    Set domParser=session.CreateDOMParser(inputStream, outputStream) 
    domParser.Process 

输出和输入流,都得到了。但它抛出以下错误domParser.Process

DOM解析器操作失败

请帮我解决这个问题。 任何帮助,将不胜感激。

+0

'inputStream.open'是否返回true? 'd:\ dxl \ xmldom.xml'是否包含有效的xml?发生错误后,domParser.log包含什么? –

+0

xml路径是正确的 – Vijayakumar

问题出在xml头文件中。它是

<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" 
    xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" 
    xmlns:rs="urn:schemas-microsoft-com:rowset" 
    xmlns:z="#RowsetSchema"> 

我删除了所有的属性。我改为<xml>,它的工作原理。

从Designer帮助摘自:

注意在7.0版中,这种方法得到了改进,处理位于URL的DTD。但是,当使用URL时,如果服务器上的负载过重,导致超时,则DOMParser.Process()会间歇性地引发错误#4602:“DOM解析器操作失败”。如果发生这种情况,调用应用程序将需要重试。

所以这可能是一个dtd的问题,要么dtd服务器没有响应或响应缓慢。我遇到了同样的问题,并在流程失败时再次尝试解决。见下面的代码:

Public Sub ParseString(s As String) 
    On Error 4602 GoTo ParserOperationFailed 

    Const MAX_RETRIES = 10 

    Dim isProcessed As Boolean 
    Dim numOfRetries As Integer 

    Set domParser = session.Createdomparser(s) 

    Do While numOfRetries < MAX_RETRIES And isProcessed = False 
     Call domParser.Process() 
     isProcessed = true 
Retry: 
    Loop 

    If Not isProcessed Then 
     Error 1000, "Unable to get dtd, DOM parser operation failed, tried " + CStr(numOfRetries+1) + "times" 
    End If 

    Set xmlDoc = domParser.Document 

    Set Me.m_rootNode = xmlDoc.Documentelement 

    Exit Sub 
ParserOperationFailed: 
    isProcessed = False 
    numOfRetries = numOfRetries + 1 
    Resume Retry 
End Sub 

我有同样的错误。详见domParser.log。也许编码类型不正确,或者找不到url的xsd | xslt样式表。

我遇到了同样的问题。您可以执行类似以下的操作,而不仅仅是删除XML标头属性。 InputValidationOption property

'create DOM parser and process 
Set domParser = session.CreateDOMParser(inputStream, outputStream) 
domParser.InputValidationOption = VALIDATE_NEVER 
domParser.Process