我有一个xml文件,用于将数据解析为HTML文件。我正在使用vbscript来做到这一点。在解析数据之前,我需要有条件地删除文件中的一些节点。我在HTML表单上有一个日期,我需要用它来比较XML文件中的日期。如果日期超出范围,那么我想删除节点及其下的任何子节点。
以下是XML示例:
在上面的示例中,如果任何子节点的“exp”值小于表单上的日期,则应将其删除。如果它下面有一个子节点,那么它也应该被删除。因此,如果我的表单上的日期是12/5/12,那么我的第一个“O”节点应该与其下的子节点一起删除。所有节点都有一个日期,所以我必须查看每个节点。该文件可以与此一样小或具有许多其他节点。谁能帮助我指出正确的方向?同样,这需要使用vbscript完成。
答案 0 :(得分:1)
使用XPath查找“有趣”节点,使用.removeChild来删除它们:
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim sFSpec : sFSpec = oFS.GetAbsolutePathName("..\data\01.xml")
Dim oXML : Set oXML = CreateObject("Msxml2.DOMDocument.6.0")
Dim sDate : sDate = "2012-08-31"
oXML.setProperty "SelectionLanguage", "XPath"
oXML.async = False
oXML.load sFSpec
If 0 = oXML.parseError Then
WScript.Echo oXML.xml
WScript.Echo "-----------------"
Dim sXPath : sXPath = "/addons/addon[@date=""" & sDate & """]"
Dim ndlFnd : Set ndlFnd = oXML.selectNodes(sXPath)
If 0 = ndlFnd.length Then
WScript.Echo sXPath, "not found"
Else
WScript.Echo "found", ndlFnd.length, "nodes for", sXPath
Dim ndCur
For Each ndCur In ndlFnd
ndCur.parentNode.removeChild ndCur
Next
End If
WScript.Echo "-----------------"
WScript.Echo oXML.xml
Else
WScript.Echo oXML.parseError.reason
End If
输出:
======================================================================
<?xml version="1.0"?>
<addons>
<addon id="TicTacToe" date="2012-11-05">
<requires>
<import addon="xbmc.python" version="1.0"/>
</requires>
</addon>
<addon id="Sudoku" date="2012-08-31">
<requires>
<import addon="xbmc.python" version="1.0"/>
</requires>
</addon>
<addon id="Doom" date="1953-04-13">
<requires>
<import addon="xbmc.python" version="1.0"/>
</requires>
</addon>
<addon id="Muehle" date="2012-10-18">
<requires>
<import addon="xbmc.python" version="1.0"/>
</requires>
</addon>
</addons>
-----------------
found 4 nodes for /addons/addon
filtering for dtX <= 31.08.2012
-----------------
<?xml version="1.0"?>
<addons>
<addon id="TicTacToe" date="2012-11-05">
<requires>
<import addon="xbmc.python" version="1.0"/>
</requires>
</addon>
<addon id="Muehle" date="2012-10-18">
<requires>
<import addon="xbmc.python" version="1.0"/>
</requires>
</addon>
</addons>
======================================================================
手动过滤很糟糕,但
<=
resp。我的搜索表达式中的<
这个更好看的代码片段:
...
Dim sXPath : sXPath = "/addons/addon[@date=""" & sDate & """]"
Dim ndlFnd : Set ndlFnd = oXML.selectNodes(sXPath)
If 0 = ndlFnd.length Then
WScript.Echo sXPath, "not found"
Else
WScript.Echo "found", ndlFnd.length, "nodes for", sXPath
Dim ndCur
For Each ndCur In ndlFnd
ndCur.parentNode.removeChild ndCur
Next
End If
...
删除Sudoku节点,但
...
Dim sXPath : sXPath = "/addons/addon[@date < """ & sDate & """]"
...
引发
msxml6.dll: Unexpected character in query string.
/addons/addon[@date -->&<--lt; "2012-08-31"]