我希望从xml以下获取2014-07-15T00:00:00-05:00日期的记录。我怎样才能使用vbscript实现这个目标?目前我正在使用它,但无法使用。
设置colNodes = xmlDoc.selectNodes _
“( “// XYZ / ABC [日期和GT; '2014-07-14T00:00:00-05:00']”)
<xyz>
<abc>
<date>2014-07-14T00:00:00-05:00</date>
<text>test1</text>
</abc>
<abc>
<date>2014-07-14T00:00:00-05:00</date>
<text>test2</text>
</abc>
<abc>
<date>2014-07-15T00:00:00-05:00</date>
<text>test3</text>
</abc>
<abc>
<date>2014-07-15T00:00:00-05:00</date>
<text>test4</text>
</abc>
<abc>
<date>2014-07-15T00:00:00-05:00</date>
<text>test5</text>
</abc>
</xyz>
答案 0 :(得分:0)
从an answer to a related question开始,我尝试了这个,似乎有效:
Option Explicit
dim xml: xml = "<xyz><abc><date>2014-07-14T00:00:00-05:00</date><text>test1</text></abc><abc><date>2014-07-14T00:00:00-05:00</date><text>test2</text></abc><abc><date>2014-07-15T00:00:00-05:00</date><text>test3</text></abc><abc><date>2014-07-15T00:00:00-05:00</date><text>test4</text></abc><abc><date>2014-07-15T00:00:00-05:00</date><text>test5</text></abc></xyz>"
'note version 6.0 of the DOM Document
dim xmldoc: set xmldoc = CreateObject("MSXML2.DomDocument.6.0")
xmldoc.async = false
' error check your XML, quit
if not xmldoc.loadXML(xml) then
WScript.Echo xmldoc.parseError.reason
WScript.Quit 1
end if
dim nodes: set nodes = xmldoc.selectNodes("//xyz/abc[number(translate(date, '-.:T', ''))>number(translate('2014-07-14T00:00:00-05:00', '-.:T', ''))]")
' put results into fragment because we won't have a full valid XML document
dim frag: set frag = xmldoc.createDocumentFragment()
dim node
for each node in nodes
frag.appendChild node
next 'node
' use result
WScript.Echo frag.xml
诀窍是认识到XPath和XSL 1.0似乎不支持DateTime类型,因此为了运行数字比较,我们在转换为数字之前使用translate()
从数据值中删除任何标点符号。
这方面的一个问题是它没有考虑您的时区组件,因此如果日期完全不同于时区,则可能会得到不正确的结果。这至少是一个起点。