これは解決できると確信していますが、通常はVBA XMLコードのXMLネームスペースを処理する必要はありません。そこで、我々は、これは単なる例でSVGファイルですが、Internet Explorerがレンダリングすることは、他のSVGファイルのために保持しているVBA XML Selectionネームスペースの問題
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 30" width="1200" height="600">
<clipPath id="t">
<path d="M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z"/>
</clipPath>
<path d="M0,0 v30 h60 v-30 z" fill="#00247d"/>
<path d="M0,0 L60,30 M60,0 L0,30" stroke="#fff" stroke-width="6"/>
<path d="M0,0 L60,30 M60,0 L0,30" clip-path="url(#t)" stroke="#cf142b" stroke-width="4"/>
<path d="M30,0 v30 M0,15 h60" stroke="#fff" stroke-width="10"/>
<path d="M30,0 v30 M0,15 h60" stroke="#cf142b" stroke-width="6"/>
</svg>
ファイルの内容を実際にSVGファイルが
Flag_of_the_United_Kingdom.svg
と呼ばれているファイルを持っており、ここにありますファイルにはルート要素の名前空間属性が必要です。
しかし、私はVBAでSVGファイルを開き、それを操作し始めて、私のコードが名前空間の問題に挑戦しています。ここでは、同じディレクトリ内のワークブックに標準モジュール内に収納されている私のコードは
Option Explicit
Sub LoadSVGFile()
'* Tools->References->Microsoft Xml, v6.0
Dim fso As Object
Set fso = VBA.CreateObject("Scripting.FileSystemObject")
Dim sSVGPath As String
sSVGPath = fso.BuildPath(ThisWorkbook.Path, "Flag_of_the_United_Kingdom.svg")
If fso.FileExists(sSVGPath) Then
Dim dom As MSXML2.DOMDocument60
Set dom = New MSXML2.DOMDocument60
dom.Load sSVGPath
Debug.Assert dom.parseError = 0
'xmlns="http://www.w3.org/2000/svg
'dom.namespaces.Add "http://www.w3.org/2000/svg", "xmlns"
dom.setProperty "SelectionNamespaces", "xmlns=""http://www.w3.org/2000/svg"""
'Call dom.setProperty("SelectionLanguage", "XPath")
Dim xmlSVG As MSXML2.IXMLDOMElement
Set xmlSVG = dom.SelectSingleNode("svg")
Debug.Assert Not dom.SelectSingleNode("svg") Is Nothing
Debug.Assert Not dom.SelectSingleNode("/svg") Is Nothing
If xmlSVG Is Nothing Then End
'* rest of code follows here but is not shown
Debug.Print "'* rest of code follows here but is not shown"
End If
End Sub
...私はルート要素から名前空間属性を削除した時には、上記のコードは動作しますが、それは、これらの理由は良くありませんファイルは、私はそれが財産の問題であると確信しているなどのInkscape
によって生成されますが、私はそれが仕事を得ることができない、私は誰かがこれを簡単に解決できると確信しています。
UPDATE:この上に周りのグーグルで、これは私が覚えている限りではhttps://support.microsoft.com/en-gb/kb/288147
:-(何かをgaranteeすることはできません –
これは偽の名前空間ではなく、あなたが話している名前空間とxPathに伝える接頭辞です。 名前空間は「http://www.w3.org」です。/2000/svg'-part xPathにsvg名前空間を既定の名前空間として扱わなければならないと思っていますが、それは可能だと思います... –
大丈夫、強い言語のためにお詫び申し上げます。 DankefürIhre Hilfe –