Что я хотел бы сделать, это сбросить строку XML в RecordSet.У меня проблема в том, что код, кажется, работает нормально, если я сначала сохранил строку XML в файл, а затем прочитал из файла, который я считаю избыточным.Однако, когда я хочу прочитать из строки, я получаю сообщение об ошибке
RecordSet не может быть создан.Исходный 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>
И код, который я использую для преобразования строки XML (с которой у меня возникла проблема), равен
Public Function RecordsetFromXMLString(sXML As String) As Recordset
Dim oStream As ADODB.Stream
Set oStream = New ADODB.Stream
oStream.Open
oStream.WriteText sXML 'Give the XML string to the ADO Stream
oStream.Position = 0 'Set the stream position to the start
Dim oRecordset As ADODB.Recordset
Set oRecordset = New ADODB.Recordset
oRecordset.Open oStream 'Open a recordset from the stream
oStream.Close
Set oStream = Nothing
Set RecordsetFromXMLString = oRecordset 'Return the recordset
Set oRecordset = Nothing
End Function
Пожалуйста, ваша помощь будет принята с благодарностью.
http://msdn.microsoft.com/en-us/library/ms810621
http://support.microsoft.com/kb/263247
Я уже пытался использовать это ниже
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