Classe XMLMapping - mapeamento XML (Word VBA)
A classe XMLMapping representa o mapeamento XML em um objeto ContentControl entre o XML personalizado e um controle de conteúdo. Um mapeamento XML é um vínculo entre o texto em um controle de conteúdo e um elemento XML no repositório de dados XML personalizado para esse documento. Para usar uma variável de classe XMLMapping, ela primeiro precisa ser instanciada por exemplo
Dim xml as XMLMapping
Set xml = ActiveDocument.Range.ContentControls(1).XMLMapping
CustomXMLNode
Retorna um objeto CustomXMLNode que representa o nó XML personalizado no repositório de dados para o qual o controle de conteúdo no documento é mapeado.
Dim objCC As ContentControl
Dim objPart As CustomXMLPart
Dim objNode As CustomXMLNode
Dim objMap As XMLMapping
Set objCC = ActiveDocument.ContentControls.Add(wdContentControlText)
Set objPart = ActiveDocument.CustomXMLParts.Add("" & _
" " & _
" ")
Set objMap = objCC.XMLMapping
objMap.SetMapping "/books/book/author", , objPart
Set objNode = objMap.CustomXMLNode
objNode.Text = "Matt Hink"
objCC.Range.Text = objNode.Text
CustomXMLPart
Retorna um objeto CustomXMLPart que representa a parte XML personalizada à qual o controle de conteúdo no documento é mapeado.
Dim objCC As ContentControl
Dim objPart As CustomXMLPart
Dim objNode As CustomXMLNode
Set objCC = ActiveDocument.ContentControls(1)
Set objPart = objCC.XMLMapping.CustomXMLPart
Set objNode = objPart.SelectSingleNode("/books/book/title")
objNode.Text = "Mystery of the Empty Chair"
Delete
Exclui o mapeamento XML do controle de conteúdo pai.
Essa opção remove o mapeamento XML. Tanto os dados do XML quanto o controle de conteúdo permanecem no documento.
Dim objCC As ContentControl
For Each objCC In ActiveDocument.ContentControls
If objCC.XMLMapping.IsMapped Then
objCC.XMLMapping.Delete
End If
Next
IsMapped
Retorna um Boolean que indica se o controle de conteúdo no documento é mapeado para um nó XML no repositório de dados XML do documento. Somente leitura.
Dim objCC As ContentControl
For Each objCC In ActiveDocument.ContentControls
If objCC.XMLMapping.IsMapped Then
objCC.XMLMapping.Delete
End If
Next
PrefixMappings
Retorna uma cadeia de caracteres que representa os mapeamentos de prefixo usados para avaliar o XPath para o mapeamento XML atual. Somente leitura.
Para definir o mapeamento de um controle de conteúdo, utilize o método SetMapping ou o método SetMappingByNode.
Dim strPrefixMappings As String
strPrefixMappings = ActiveDocument.Range.ContentControls(1).XMLMapping.PrefixMappings
SetMapping
Permite criar ou alterar o mapeamento XML em um controle de conteúdo. Retorna true se o Microsoft Word mapeia o controle de conteúdo para um nó XML personalizado no repositório de dados XML personalizado do documento.
Se o mapeamento XML já existir, o Word substituirá o mapeamento XML existente e o conteúdo do novo nó XML mapeado substituirá o texto do controle de conteúdo. Se o XPath especificado não for avaliado para um nó XML nas partes XML personalizadas especificadas, ainda será possível especificar o mapeamento e ele será criado. Esse mapeamento é vinculado automaticamente quando o XPath especificado for avaliado para um nó XML nas partes XML personalizadas especificadas. Consulte também o método SetMappingByNode.
SetMapping (XPath, PrefixMapping, Source)
Dim objRange As Range
Dim objCustomPart As CustomXMLPart
Dim objCustomControl As ContentControl
Set objCustomPart = ActiveDocument.CustomXMLParts.Add
objCustomPart.LoadXML ("Matt Hink " & _
"Migration Paths of the Red Breasted Robin " & _
"non-fiction 29.95 " & _
"2/1/2007 You see them in " & _
"the spring outside your windows. You hear their lovely " & _
"songs wafting in the warm spring air. Now follow the path " & _
"of the red breasted robin as it migrates to warmer climes " & _
"in the fall, and then back to your back yard in the spring." & _
" ")
ActiveDocument.Range.InsertParagraphBefore
Set objRange = ActiveDocument.Paragraphs(1).Range
Set objCustomControl = ActiveDocument.ContentControls _
.Add(wdContentControlText, objRange)
objCustomControl.XMLMapping.SetMapping _
"/books/book/title", , objCustomPart
objRange.InsertParagraphAfter
Set objRange = ActiveDocument.Paragraphs(2).Range
Set objCustomControl = ActiveDocument.ContentControls _
.Add(wdContentControlText, objRange)
objCustomControl.XMLMapping.SetMapping _
"/books/book/abstract", , objCustomPart
Arguments
O seguinte argumento é necessário
XPath (String) - Especifica uma sequência de caracteres do XPath que representa o nó XML ao qual o controle de conteúdo será mapeado. Uma sequência de caracteres do XPath inválida causa um erro em tempo de execução.
Optional arguments
Os seguintes argumentos são opcionais
PrefixMapping (String) - Especifica os mapeamentos de prefixo a serem utilizados durante a consulta da expressão fornecida no parâmetro XPath. Se for omitido, o Word utilizará o conjunto de mapeamentos de prefixo para a parte XML personalizada especificada no documento atual.
Source (Office.CustomXMLPart) - Especifica os dados XML personalizados desejados para a qual mapear o controle de conteúdo. Se esse parâmetro for omitido, o XPath é avaliado em relação a todos os XML personalizadas no documento atual e o mapeamento é estabelecido com o primeiro CustomXMLPart no qual o XPath resolve para um nó XML.
SetMappingByNode
Permite criar ou alterar o mapeamento de dados XML em um controle de conteúdo. Retorna true se o Microsoft Word mapeia o controle de conteúdo para um nó XML personalizado no repositório de dados XML personalizado do documento.
Se o mapeamento XML já existir, o Word substituirá o mapeamento XML existente e o conteúdo do novo nó XML mapeado substituirá o texto do controle de conteúdo. Consulte também o método SetMapping.
SetMappingByNode (Node)
Node: Especifica o nó XML ao qual o controle de conteúdo atual será mapeado.
Dim objcc As ContentControl
Dim objNode As CustomXMLNode
Dim objMap As XMLMapping
Dim booMap As Boolean
ActiveDocument.BuiltInDocumentProperties("Author").Value = "David Jaffe"
Set objcc = ActiveDocument.ContentControls.Add _
(wdContentControlDate, ActiveDocument.Paragraphs(1).Range)
Set objNode = ActiveDocument.CustomXMLParts.SelectByNamespace _
("https://schemas.openxmlformats.org/package/2006/metadata/core-properties") _
(1).DocumentElement.ChildNodes(1)
Set objMap = objcc.XMLMapping
booMap = objMap.SetMappingByNode(objNode)
XPath
Retorna uma cadeia de caracteres que representa o XPath para o mapeamento XML, que é avaliada como o nó XML mapeado no momento. Somente leitura.
Para definir o mapeamento de um controle de conteúdo, utilize o método SetMapping ou o método SetMappingByNode. Se o mapeamento não estiver ativo, a utilização dessa propriedade retornará um erro.
Dim objCC As ContentControl
Dim objMap As XMLMapping
Dim booMap As Boolean
Set objCC = ActiveDocument.ContentControls(1)
Set objMap = objCC.XMLMapping
If (objCC.Type = wdContentControlDate) And (objMap.XPath <> _
"/ns1:coreProperties[1]/ns0:createdate[1]") Then
booMap = objMap.SetMapping(XPath:="/ns1:coreProperties[1]/ns0:createdate[1]")
If booMap = False Then
MsgBox "Unable to map the content control."
End If
End If