Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
XML predefine cinco referências de entidade para caracteres especiais que caso contrário, seria interpretados como parte da linguagem de marcação. Estas cinco são apresentados como segue:
Entity Reference Character
& &
<: <
> >
" "
' '
quando criar um documento XML, tem entrada destes caracteres especiais adequadamente para assegurar a apresentação de análise, interpretação e dados adequada. Quando cria um documento XML a partir do Visual Basic, uma forma para procurar estes caracteres especiais e substitua a referência de entidade adequado é utilizar a função Substituir .
Nota : Microsoft Visual Basic 6.0 e posteriores produtos e Microsoft Office 98 e posteriores produtos são fornecidos com uma função Substituir está incorporada.
O exemplo seguinte abre um conjunto de registos ADO, cria elementos de documento para os registos e guarda os dados como um documento XML utilizando o objeto FileSystemObject . Antes de guardar o ficheiro, no entanto, o conteúdo é procurado caracteres especiais e substituído com as referências de entidade XML adequado para esses caracteres utilizando o método Substituir .
Nota : para simplicidade de demonstração, as instruções são para uma procura e substituir para o carácter ' e ' comercial (&) no seguinte exemplo. A mesma função pode ser aplicada para os outros quatro caracteres bem.
Para executar este exemplo, inicie um novo projecto do Visual Basic Standard Exe. É criado o Form1 por predefinição.
No menu projecto , em References , seleccione o seguinte: Microsoft ActiveX Data Objects Library (2.1 ou posterior) Microsoft XML, versão 1.0 ou posterior Microsoft Scripting Runtime * * O modelo de objectos FileSystemObject está contido na biblioteca de tipo de processamento de scripts.
Desenhar os seguintes controlos no Form1 e defina as respectivas propriedades, conforme listado:
Control Name Caption
Label lblFSORecordCount Record Count:
Text Box txtFSORecordCount
Command Button cmdOpenAdoFsoRs Open ADO Recordset
Command Button cmdSaveRSasXMLwithFSO Save RS as XML using FSO
Command Button cmdFsoXmltoTreeView Place XML Data Into TreeView
TreeView Control* xtvFSO
*The TreeView Control is part of the Windows Common Controls.
Therefore, you want to check this off under Components in the Project menu.
No menu Project , adicione um módulo padrão e copie o seguinte para criar as variáveis adequadas necessárias no projecto:
Option Explicit
Public cn As New adodb.Connection
Public rs As New adodb.Recordset
Public myI As Integer
Public StrTmp As String
Public Errs1 As Errors
Public myFSO As New FileSystemObject
Public myTxtStream As TextStream
Public myfld As adodb.Field
Public domdoc As New MSXML.DOMDocument
Public domdoc As New MSXML2.DOMDocument 'For use with XML 2.6
Copie o código seguinte para a secção de declarações geral da janela de código. Nota : substituir as informações de nome do servidor, ID de utilizador e palavra-passe na cadeia de ligação.
Private Sub cmdOpenAdoFsoRs_Click()
Screen.MousePointer = vbHourglass
'Check to be sure the connection is not already opened:
If cn.State = 1 Then
cn.Close
Set cn = Nothing
End If
cn.Open "driver={SQL Server};Server=YourServer;uid=YourUID;pwd=YourPWD;database=Northwind"
'Check to be sure a Recordset is not already opened:
If rs.State = 1 Then
rs.Close
Set rs = Nothing
End If
With rs
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.CacheSize = 50
.Source = "Select CustomerID, " & _
"CompanyName, ContactName, Region from Customers"
.ActiveConnection = cn
.Open
End With
rs.MoveLast
rs.MoveFirst
txtFsoRecordCount.Text = rs.RecordCount
Screen.MousePointer = vbNormal
End Sub
Private Sub cmdExit_Click()
If cn.State = 1 Then
cn.Close
Set cn = Nothing
End If
If rs.State = 1 Then
rs.Close
Set rs = Nothing
End If
Unload Me
End Sub
Private Sub cmdSaveRSasXMLwithFso_Click()
Screen.MousePointer = vbHourglass
'If the file already exists, first Kill it
'and then create it.
'If it does not already exist, simply create it:
On Error GoTo mdkNoSeeEm
Const mdkNoSeeEm = 53 'File Not Found
Kill "Customers.xml"
'Note: Unicode data is stored as 2 Bytes per character. This will allow
'proper parsing of international language characters. However, either
'omitting or explicitly setting the last 'argument in the CreateTextFile
'Method to False will create the file as Ascii. Subsequently, a '"An
'Invalid Character Was Found in Text Content" error will occur if these
'characters exist in 'the text. Therefore, you use Unicode (True).
'Create a Text file using the FileSystemObject:
Set myTxtStream = myFSO.CreateTextFile(App.Path & "\Customers.xml", True, True)
'After searching for and replacing special characters with
'their respective entities (via the ReplaceEntXMLSpecChar Function),
'write the data to Text File to compile XML Document using the TextStream:
myTxtStream.WriteLine "<?xml version=""1.0"" standalone=""yes""?>"
myTxtStream.WriteLine "<Customers>"
rs.MoveFirst
Do While Not rs.EOF
myTxtStream.WriteLine "<Customer>"
myTxtStream.WriteLine "<CustomerID>" & ReplaceEntXMLSpecChar(rs.Fields("CustomerID") & "", "&", "amp;") & "</CustomerID>"
myTxtStream.WriteLine "<CompanyName>" & ReplaceEntXMLSpecChar(rs.Fields("CompanyName") & "", "&", "amp;") & "</CompanyName>"
myTxtStream.WriteLine "<ContactName>" & ReplaceEntXMLSpecChar(rs.Fields("ContactName") & "", "&", "amp;") & "</ContactName>"
myTxtStream.WriteLine "<Region>" & ReplaceEntXMLSpecChar(rs.Fields("Region") & "", "&", "amp;") & "</Region>"
myTxtStream.WriteLine "</Customer>"
rs.MoveNext
Loop
rs.MoveFirst
myTxtStream.WriteLine "</Customers>"
myTxtStream.Close
Screen.MousePointer = vbNormal
Exit Sub
mdkNoSeeEm:
If Err.Number = mdkNoSeeEm Then
Resume Next
End If
Screen.MousePointer = vbNormal
End Sub
'When this function is applied to each record in the recordset,
'simply provide the Source to perform the search on, the item
'to be Searched For and the item to Replace with:
Private Function ReplaceEntXMLSpecChar(ByVal strSource As String, ByVal strSearchFor As String, ByVal strReplace As String) _
As String
Dim lngPointer As Long, strNew As String
lngPointer = InStr(strSource, strSearchFor)
If lngPointer = 0 Then
ReplaceEntXMLSpecChar = strSource
Else
strNew = Left$(strSource, lngPointer - 1) & strReplace & Mid(strSource, lngPointer + 1, Len(strSource))
ReplaceEntXMLSpecChar = strNew
End If
End Function
Private Sub cmdFsoXmltoTreeView_Click()
'Fill The TreeView with data from the XML Document:
With DOMdoc
.async = False
.Load App.Path & "\customers.xml"
End With
If DOMdoc.readyState = 4 Then
xtvFSO.Nodes.Clear
AddNode DOMdoc.documentElement
End If
End Sub
Private Sub AddNode(ByRef myNode As IXMLDOMNode, Optional ByRef TreeNode As Node)
Dim tvcusterrNode As Node
Dim tvcusterrNodeList As IXMLDOMNodeList
Dim i As Long
If TreeNode Is Nothing Then
Set tvcusterrNode = xtvFSO.Nodes.Add
Else
Set tvcusterrNode = xtvFSO.Nodes.Add(TreeNode, tvwChild)
End If
tvcusterrNode.Expanded = True
tvcusterrNode.Text = myNode.nodeName
If tvcusterrNode.Text = "#text" Then
tvcusterrNode.Text = myNode.nodeTypedValue
Else
tvcusterrNode.Text = "<" & tvcusterrNode.Text & ">"
End If
Execute o projecto.
Clique no CommandButton Abrir conjunto de registos ADO para abrir a ligação e conjunto de registos, apresentar um RecordCount.
Clique no CommandButton RS guardar como XML utilizando FSO para analisar os dados, substituir caracteres especiais no conjunto de registos e, em seguida, guardá-lo como um documento XML através de FileSystemObject objecto.
Posteriormente, clique no CommandButton Local FSO dados de XML para TreeView para abrir o ficheiro XML e apresentar os dados no controlo de TreeView.
Se abrir o documento XML produzido no bloco de notas ou qualquer outro editor de texto e efectuar uma procura para o "e" comercial (&), encontrará:
Split Rail Beer &
treeview, este aparece como:
Split Rail Beer &
Se uma versão mais recente do MSXML tiver sido instalada no modo side-by-side, tem explicitamente utilizar global identificadores exclusivos (globais GUID) de ProgID para essa versão para executar o código de exemplo. Por exemplo, o MSXML 4.0 só pode ser instalado no modo side-by-side. Para obter informações adicionais sobre as alterações de código que são necessários para executar o código de exemplo com o analisador MSXML 4.0, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
305019
(http://support.microsoft.com/kb/305019/EN-US/
)
INFO: O MSXML 4.0 GUID específicos e ProgIds
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 251354
(http://support.microsoft.com/kb/251354/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
O que podemos fazer para melhor estas informações?
Para proteger a sua privacidade, não inclua as informações de contacto nos comentários.
Obrigado! Os seus comentários serão utilizados para nos ajudar a melhorar o conteúdo do suporte. Para obter mais opções de assistência, visite a Home Page da Ajuda e Suporte.