Quantcast
Channel: Open XML Format SDK forum
Viewing all articles
Browse latest Browse all 1288

Delete Attributes

$
0
0

Posting here on the suggestion in another group to post in a more XML oriented group. Hope I'm in or at least closer to the right place.

I am attempting, perhaps fruitlessly, to develop a rudimentary custom change event for a Word rich text content control. I am not a true programmer and just dabble with VBA.  However, I have working custom change event which detects changes in "text" and was hoping to expand it to detect any change.

My thought was to set a string variable = to the WordOpenXML value in the control and then monitor the WordOpenXML and trigger a change event when it changes from the reference string value.  I learned right away that the value of the WordOpenXML is huge and contains attributes (rsid values) that can change when the XML is querried.

What I have done since is to narrow the XML string down to a much smaller chunk.  What I am now trying to do is remove any attribute that has a basename of "rsidRPr" I found on a google search a method  .removeAttribute, but I can't make it work.

For this code to work you need a blank Word document with a single richtext control containing a small bit of text.

Thanks.

Sub ScratchMacro()
Dim oXDoc As New MSXML2.DOMDocument
Dim oNode As MSXML2.IXMLDOMNode
Dim oNode2 As MSXML2.IXMLDOMNode
Dim oNode3 As MSXML2.IXMLDOMNode
Dim oAttr As MSXML2.IXMLDOMAttribute
oXDoc.LoadXML (ActiveDocument.ContentControls(1).Range.WordOpenXML)
oXDoc.setProperty "SelectionLanguage", "XPath"
oXDoc.setProperty "SelectionNamespaces", _"xmlns:pkg='http://schemas.microsoft.com/office/2006/xmlPackage'" & _" xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'"
'Set a = oXDoc.SelectNodes("/pkg:package[1]/pkg:part[3]/pkg:xmlData[1]/w:document[1]/w:body[1]/w:p[1]")
Set oNode = oXDoc.SelectSingleNode("/pkg:package[1]/pkg:part[3]/pkg:xmlData[1]/w:document[1]/w:body[1]/w:p[1]")
For Each oNode2 In oNode.ChildNodes
  For Each oNode3 In oNode2.ChildNodes
    For Each oAttr In oNode2.Attributes
      If oAttr.BaseName = "rsidRPr" Then
        oNode2.removeAttribute (oAttr.BaseName)
      End If
    Next
  Next oNode3
Next oNode2
ActiveDocument.Range.InsertAfter vbCr & oNode.XML
End Sub


Greg Maxey Please visit my website at: http://gregmaxey.mvps.org/word_tips.htm


Viewing all articles
Browse latest Browse all 1288

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>