如果在使用VBA的Word模板中有<b>或<i>,则无法获取数据的值

时间:2016-08-29 06:54:28

标签: xml vba word-vba

我能够读取XML文件并成功转换为Array。现在我想在数据中添加格式。出于这个原因,我已经在XML中添加和标记,但如果它有或任何其他格式标记,我将无法获得标记的值。

这是代码:

<?xml version="1.0" encoding="UTF-8"?>
<TestClass>
  <TestObject>
    <Site><b><i>Whatsapp</i></b></Site>
    <URL>https://www.Whatsapp.com/ABC/</URL>
  </TestObject>
  <TestObject>
    <Site>Facebook</Site>
    <URL>https://www.facebook.com/XYZ/</URL>
  </TestObject>
  <TestObject>
    <Site>Twitter</Site>
    <URL>https://www.twitter.com/ABC/</URL>
  </TestObject>
</TestClass>

代码:

Dim oXMLFile As Object
Dim XMLFileName As String
Dim Sites As Object
Dim URLs As Object

Set oXMLFile = CreateObject("Microsoft.XMLDOM")
XMLFileName = "C:\Users\abc\Desktop\Files\Test.xml"
oXMLFile.Load (XMLFileName)

Set Sites = oXMLFile.SelectNodes("TestClass/TestObject/Site/text()")
Set URLs = oXMLFile.SelectNodes("TestClass/TestObject/URL/text()")

//Sites get only `Facebook` and `Twitter`

如果我移除<b><i>,它会正常工作,我将获得所有3个元素的值。

请建议如何在从XML获取值时管理格式。

1 个答案:

答案 0 :(得分:0)

不允许在XML-Textblock中使用<>。你必须“掩盖”他们。最好将<转换为&lt;,将>转换为&gt;

看看这个:https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

问题的背景:

XML解析器读取文件的整个结构。每个标记(<>中包含的单词)在内部tzree中创建一个新节点。如果要访问节点,只需沿树下行即可。

在您的示例中:如果您希望TestClass/TestObject/Site/text()解析器首先创建一个这样的树:

TestClass
  +--TestObject
  |  +--Site
  |  |+--b
  |  |   +--i
  |  |      +--text=Whatsapp
  |  +--URL
  |     +--text=https://www.Whatsapp.com/ABC/
  +--TestObject
  |  +--Site
  |  |  +--text=Facebook
  |  +--URL
  |     +--text=https://www.facebook.com/XYZ/

然后它跟随你的XPAth TestClass/TestObject/Site/并取得节点

+--Site
|  +--b
|     +--i
|        +--text=Whatsapp

此节点没有text。所以它返回一个空字符串