Javascript 帮助将XML字符串传递到记录集
我想做的是将XML字符串转储到记录集中。我遇到的问题是,如果我先将XML字符串保存到一个文件中,然后从我认为是多余的文件中读取,那么代码似乎工作正常。然而,当我想从字符串中读取时,我得到了错误 无法创建记录集。源XML不完整或无效。80004005 我的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>
<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>