Javascript 帮助将XML字符串传递到记录集

Javascript 帮助将XML字符串传递到记录集,javascript,asp-classic,vbscript,ado,Javascript,Asp Classic,Vbscript,Ado,我想做的是将XML字符串转储到记录集中。我遇到的问题是,如果我先将XML字符串保存到一个文件中,然后从我认为是多余的文件中读取,那么代码似乎工作正常。然而,当我想从字符串中读取时,我得到了错误 无法创建记录集。源XML不完整或无效。80004005 我的XML字符串的格式为 <portfolio> <stock> <shares>100</shares> <symbol>MSFT</symbol>

我想做的是将XML字符串转储到记录集中。我遇到的问题是,如果我先将XML字符串保存到一个文件中,然后从我认为是多余的文件中读取,那么代码似乎工作正常。然而,当我想从字符串中读取时,我得到了错误

无法创建记录集。源XML不完整或无效。80004005

我的XML字符串的格式为

<portfolio>
   <stock>
      <shares>100</shares>
      <symbol>MSFT</symbol>
      <price>$70.00</price>
      <info>
         <companyname>Microsoft Corporation</companyname>
         <website>http://www.microsoft.com</website>
      </info>
   </stock>
   <stock>
      <shares>100</shares>
      <symbol>AAPL</symbol>
      <price>$107.00</price>
      <info>
         <companyname>Apple Computer, Inc.</companyname>
         <website>http://www.apple.com</website>
      </info>
   </stock>
   <stock>
      <shares>100</shares>
      <symbol>DELL</symbol>
      <price>$50.00</price>
      <info>
         <companyname>Dell Corporation</companyname>
         <website>http://www.dell.com</website>
      </info>
    </stock>
    <stock>
       <shares>100</shares>
       <symbol>INTC</symbol>
       <price>$115.00</price>
       <info>
          <companyname>Intel Corporation</companyname>
          <website>http://www.intel.com</website>
       </info>
   </stock>
</portfolio>
请,我们将非常感谢您的帮助

我已经试过在下面使用这个了

Public Function RecordsetFromXMLDocument(XMLDOMDocument) 
    Dim oRecordset 
    Set oRecordset = CreateObject("ADODB.Recordset.6.0")
    oRecordset.Open XMLDOMDocument 'pass the DOM Document instance as the Source argument

    Set RecordsetFromXMLDocument = oRecordset  'return the recordset

    Set oRecordset = Nothing
End Function
但还是遇到了同样的问题


我用来将我的DomDocumentData格式化为我需要的ADO XML持久格式的代码

'*******************************************************************************************
' SCHEMA GENERATOR
'*******************************************************************************************
'parentnodepath -- XPath to the Main Node/Table/RowCollection
'parentnodepath -- Name of the Main Node/Table/RowCollection
Function CreateSchemafromNode(XMLDocument,parentnodepath, parentnodeName)
        Dim schema, stemp, MyArray,nodename, childnodelist,counter, n, x, tempnode
        schema = TextWriterSchemaNameSpaceHeader()
        schema=schema & TextWriterSchemaHeader(parentnodeName)
        'LOOP HERE 
          counter = 0

            For Each stemp In XMLDocument.SelectSingleNode(parentnodePath).ChildNodes(0).ChildNodes
                    counter = counter + 1
                    schema = schema & TextWriterSchemaRowAttributeElement(stemp.NodeName, counter, "")
            Next
        'END LOOOP HERE
            schema=schema & TextWriterSchemaSchemaEnd
            schema =schema &  TextWriterSchemaRowHeader
           'BEGIN FIRST LOOP HERE -- FOR EACH TOP NODE --ROW
                For Each n In XMLDocument.SelectSingleNode(parentnodePath).ChildNodes
                        schema =schema & TextWriterSchemaAddRowBegin()
                    'BEGIN SECOND LOOP HERE -- FOR EACH CHILD OF TOP NODE -- NODE VALUE IN CURRENT ROW -- FOR EACH CHILDNODELIST NAME
                    For Each x In n.ChildNodes
                            schema = schema & TextWriterSchemaAddRowFieldNameValue(x.NodeName, x.text) 
                    'END SECOND LOOP HERE 
                    Next
                    schema =schema & TextWriterSchemaAddRowEnd()
           Next 
        'END FIRST LOOP HERE 
        schema =schema & TextWriterSchemaRowEnd()
        schema =schema &TextWriterSchemaNameSpaceEnd()

        CreateSchemafromNode=schema
End Function 


Function TextWriterSchemaNameSpaceHeader()
  Dim schemaString 

    schemaString= "<xml xmlns:s='"
    schemaString= schemaString & "uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' " & vbCrLf & vbTab
    schemaString= schemaString & ("xmlns:dt='")
    schemaString= schemaString & "uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' " & vbCrLf & vbTab
  ' schemaString= schemaString & ("xmlns:dt='")
  ' schemaString= schemaString & "uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' " & vbCrLf & vbTab
    schemaString= schemaString & "xmlns:rs='urn:schemas-microsoft-com:rowset' "  & vbCrLf & vbTab
    schemaString=schemaString & " xmlns:z='#RowsetSchema'> " & vbCrLf 
    TextWriterSchemaNameSpaceHeader = schemaString 
End Function


Function TextWriterSchemaHeader(recordname)
     Dim schemaString 
            schemaString= "<s:Schema id='RowsetSchema'>"& vbCrLf & vbTab
            schemaString= schemaString &"<s:ElementType name='" & recordname & "' content='eltOnly'>" & vbCrLf 
            TextWriterSchemaHeader = schemaString 
End Function

Function TextWriterSchemaRowAttributeElement(rowname, rowordernumber, rowtype)
    Dim schemaString 
        schemaString=vbTab & vbTab & "<s:AttributeType  name='" & rowname & "'  rs:number='" & rowordernumber & "'  />" & vbCrLf 
        TextWriterSchemaRowAttributeElement = schemaString
End Function

Function TextWriterSchemaSchemaEnd()
      Dim schemaString 
        schemaString=vbTab & vbTab & "<s:extends type='rs:rowbase'/>" & vbCrLf 
        schemaString= schemaString &vbTab &  "</s:ElementType>" & vbCrLf 
        schemaString= schemaString & "</s:Schema>"  & vbCrLf 
        TextWriterSchemaSchemaEnd =schemaString
End Function

Function TextWriterSchemaRowHeader()
        Dim schemaString 
            schemaString= vbTab & "<rs:data>" & vbCrLf 
            TextWriterSchemaRowHeader = schemaString
End function

Function TextWriterSchemaAddRowBegin()
      Dim schemaString 
        schemaString=vbTab & "<z:row "
        TextWriterSchemaAddRowBegin=schemaString
End function

Function TextWriterSchemaAddRowFieldNameValue(FieldName, FieldValue)
    Dim schemaString 
            schemaString= FieldName & "='" & FieldValue & "' "
            TextWriterSchemaAddRowFieldNameValue=schemaString
End function

Function TextWriterSchemaAddRowEnd()
        Dim schemaString
           schemaString="/>"  & vbCrLf 
           TextWriterSchemaAddRowEnd=schemaString
End function


Function TextWriterSchemaRowEnd()
         Dim schemaString
              schemaString=vbTab & "</rs:data>" & vbCrLf 
               TextWriterSchemaRowEnd=schemaString
End function

Function TextWriterSchemaNameSpaceEnd()
         Dim schemaString
               schemaString="</xml>"  & vbCrLf 
               TextWriterSchemaNameSpaceEnd=schemaString
End Function
'*******************************************************************************************
'模式生成器
'*******************************************************************************************
'parentnodepath--指向主节点/表/行集合的XPath
'parentnodepath--主节点/表/行集合的名称
函数CreateSchemafromNode(XMLDocument、parentnodepath、parentnodeName)
Dim模式、stemp、MyArray、节点名称、子节点列表、计数器、n、x、tempnode
schema=TextWriterSchemaNameSpaceHeader()
schema=schema&TextWriterSchemaHeader(parentnodeName)
“在这儿转一圈
计数器=0
对于XMLDocument中的每个stemp。选择SingleNode(parentnodePath)。ChildNodes(0)。ChildNodes
计数器=计数器+1
schema=schema&TextWriterSchemaRowAttributeElement(stemp.NodeName,counter,“”)
下一个
“在这里结束LOOOP
schema=schema&textWriterschemaschemand
schema=schema&TextWriterSchemaRowHeader
'在此处开始第一个循环--对于每个顶部节点--行
对于XMLDocument中的每个n。选择SingleNode(parentnodePath)。ChildNodes
schema=schema&TextWriterSchemaAddRowBegin()
'在这里开始第二个循环--对于顶部节点的每个子节点--当前行中的节点值--对于每个子节点列表名称
对于n.ChildNodes中的每个x
schema=schema&TextWriterSchemaAddRowFieldNameValue(x.NodeName,x.text)
'在这里结束第二个循环
下一个
schema=schema&TextWriterSchemaAddRowEnd()
下一个
'在这里结束第一个循环
schema=schema&TextWriterSchemaRowEnd()
schema=schema&TextWriterSchemaNameSpaceEnd()
CreateSchemafromNode=schema
端函数
函数TextWriterSchemaNameSpaceHeader()
模糊计划

schemaString=“您会遇到此错误,因为您提供的XML格式不是ADODB.Recordset可以理解的格式。该格式需要类似于以下基于的格式。有关详细信息,请参阅上的文档

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 
    xmlns:rs='urn:schemas-microsoft-com:rowset' 
    xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
    <s:ElementType name='row' content='eltOnly'>
        <s:AttributeType name='shares' rs:number='1' />
        <s:AttributeType name='symbol' rs:number='2' />
        <s:AttributeType name='price' rs:number='3' />
        <s:extends type='rs:rowbase'/>
    </s:ElementType>
</s:Schema>
<rs:data>
    <z:row shares='100' symbol='MSFT' price='$70.00'  />
    <z:row shares='100' symbol='AAPL' price='$107.00'  />
    <z:row shares='100' symbol='DELL' price='$50.00'  />
</rs:data>
</xml>

在过去使用ADO和XML时,我曾将XML格式转换为ADO XML格式。您也可以通过编程方式进行转换。以下是一些示例(它们不是VB6,但应该可以让您了解所需的内容)


如果我要用附加字符串的方式来构建XML,这是否可行,或者MSXML2或更高版本中是否有可以帮助将XML字符串转换为正确格式的功能?您也可以使用MSXML API构建DOMDocument,并在
记录的
Open
方法的参数处使用它et
,因为它可以使用任何实现IStream
接口的对象,IXMLDOMDocument就是这样做的。请看,我确实从这个链接尝试了这种方法,传入了objXMLDoc2=CreateObject(“MSXML2.DOMDocument.3.0”),遇到了同样的问题。
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 
    xmlns:rs='urn:schemas-microsoft-com:rowset' 
    xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
    <s:ElementType name='row' content='eltOnly'>
        <s:AttributeType name='shares' rs:number='1' />
        <s:AttributeType name='symbol' rs:number='2' />
        <s:AttributeType name='price' rs:number='3' />
        <s:extends type='rs:rowbase'/>
    </s:ElementType>
</s:Schema>
<rs:data>
    <z:row shares='100' symbol='MSFT' price='$70.00'  />
    <z:row shares='100' symbol='AAPL' price='$107.00'  />
    <z:row shares='100' symbol='DELL' price='$50.00'  />
</rs:data>
</xml>