【发布时间】:2013-05-09 13:57:18
【问题描述】:
关闭问题,因为它不是错误 - 这是不可能的
我正在尝试返回一个范围,该范围包含 listobject/xmlmap 中的所有元素,其中兄弟元素满足某些条件(特定元素值不是空/空白/零长度)。
如果我尝试返回 xmlmap 的整个元素,我会得到正确返回的范围。但是,一旦我添加任何条件,范围对象就没有设置,我得到一个错误。
我已经删除了整个命名空间引用,以尝试确定错误,但即使没有命名空间声明,错误仍然存在。下面的代码是我正在使用的代码的简化版本,用于显示错误。
XML 数据
<?xml version='1.0' encoding='UTF-8'?>
<ROOT>
<RECORD>
<ITEMA/>
<ITEMB>RED</ITEMB>
</RECORD>
<RECORD>
<ITEMA>A</ITEMA>
<ITEMB>BLUE</ITEMB>
</RECORD>
<RECORD>
<ITEMA>B</ITEMA>
<ITEMB>GREEN</ITEMB>
</RECORD>
</ROOT>
XSD 用于在 Excel 中设置 XmlMap
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="ROOT" type="RootType"/>
<xs:complexType name="RootType">
<xs:sequence>
<xs:element name="RECORD" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="ITEMA"/>
<xs:element name="ITEMB"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
工作 VBA 代码(无谓词)
Sub TestSUCCESS()
Dim rngSource As Range
Dim sSourceXPath As String
sSourceXPath = "/ROOT/RECORD/ITEMB"
Set rngSource = Sheet4.XmlDataQuery(sSourceXPath)
Debug.Print rngSource.Address
End Sub
非工作 VBA 代码(带谓词)
Sub TestERROR()
Dim rngSource As Range
Dim sSourceXPath As String
sSourceXPath = "/ROOT/RECORD/ITEMA[text()[normalize-space()]]"
Set rngSource = Sheet4.XmlDataQuery(sSourceXPath)
If Not rngSource Is Nothing Then
Debug.Print rngSource.Address
Else
Debug.Print "ERROR: rngSource isn't set"
End If
End Sub
我也尝试过使用以下 xpath:
"/ROOT/RECORD/ITEMB[../ITEMA[string-length(text()) > 0]]"
以及以下的变体只是为了让任何事情都能正常工作,但无济于事:
sSourceXPath = "/ROOT/RECORD/ITEMB[../ITEMA[.="A"]]"
我给出的所有 xPath 示例都在 Altova XMLSpy 2005 中工作。
任何人都可以提供任何关于我哪里出错的建议吗?
【问题讨论】:
-
我不认为结束这个问题是适当的行动。也许用户用户可能有理智的问题。
标签: xml vba xpath excel-2003