使用经典 ASP 在 XML 文档中追加子项
Append child in XML document using Classic ASP
我有以下 asp-经典代码,它将 3 个变量附加到 XML 文档中,'location_x'、'location_y' 和 'date_and_time'。
ASP-经典代码 - 创建或附加现有 XML 文档。
Function LoadObjecttoXML(strXMLFilePath, strFileName)
Dim objDom
Dim objGpx
Dim objWpt
Dim objRte
Dim objRtept
Dim objDateTime
Dim objattLat
Dim objattLon
Dim objPI
Dim blnFileExists
'Instantiate the Microsoft XMLDOM
Set objDom = server.CreateObject("Microsoft.XMLDOM")
objDom.preserveWhiteSpace = True
blnFileExists = objDom.Load(strXMLFilePath & "\" & strFileName)
If blnFileExists = True Then
Set objGpx = objDom.documentElement
Else
'GPX root element and append it to the XML document.
Set objGpx = objDom.createElement("gpx")
objDom.appendChild objGpx
End If
Set objWpt = objDom.createElement("wpt")
'Create "Lat" attribute'
Set objattLat = objDom.createAttribute("lat")
objattLat.Text = (location_x)
objWpt.setAttributeNode objattLat
'Create "Lon" attribute'
Set objattLon = objDom.createAttribute("lon")
objattLon.Text = (location_y)
objWpt.setAttributeNode objattLon
'Create "date_and_time" element'
Set objDateTime = objDom.createElement("time")
objDateTime.Text = (date_and_time)
'Append "wpt" element as a child container element "gpx".'
objGpx.appendChild objWpt
'Append the "time" element as a child of the "wpt" element'
objWpt.appendChild objDateTime
'Append "rte" element only once'
If blnFileExists = True Then
Set objRte = objDom.documentElement
Else
Set objRte = objDom.createElement("rte")
objGpx.appendChild objRte
End If
Set objRtept = objDom.createElement("rtept")
'Create "Lat" attribute'
Set objattLat = objDom.createAttribute("lat")
objattLat.Text = (location_x)
objRtept.setAttributeNode objattLat
'Create "Lon" attribute'
Set objattLon = objDom.createAttribute("lon")
objattLon.Text = (location_y)
objRtept.setAttributeNode objattLon
'Create "date_and_time" element'
Set objDateTime = objDom.createElement("time")
objDateTime.Text = (date_and_time)
'Append "rtept" element as a child container element "rte".'
objRte.appendChild objRtept
'Append the "time" element as a child of the "rtept" element'
objRtept.appendChild objDateTime
If blnFileExists = False Then
'Create the xml processing instruction - and append to XML file
Set objPI = objDom.createProcessingInstruction("xml", "version='1.0'")
objDom.insertBefore objPI, objDom.childNodes(0)
End If
'Save the XML document.
objDom.save strXMLFilePath & "\" & strFileName
Set objDom = Nothing
Set objGpx = Nothing
Set objWpt = Nothing
Set objRte = Nothing
Set objRtept = Nothing
Set objDateTime = Nothing
Set objattLat = Nothing
Set objattLon = Nothing
Set objPI = Nothing
Set blnFileExists = Nothing
End Function
On Error Resume Next
'File path c:\
LoadObjecttoXML "c:\Inetpub\wwwroot\xml","doc.xml"
'error check
If err.number <> 0 then
Response.write("Error: " & err.number )
Else
Response.write("Success!")
End If
我遇到的问题是当我第二次追加变量时,追加的 XML 没有放在正确的元素中。
例如,XML 代码在第一次追加时看起来像这样:
<gpx>
<wpt lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</wpt>
<rte>
<rtept lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</rtept>
</rte>
</gpx>
第二次追加时:
<gpx>
<wpt lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</wpt>
<rte>
<rtept lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</rtept>
</rte>
<wpt lat="52.100" lon="-1.100">
<time>2016-09-23 23:39:00</time>
</wpt>
<rte>
<rtept lat="52.100" lon="-1.100">
<time>2016-09-23 23:39:00</time>
</rtept>
</rte>
</gpx>
我希望 XML 像这样附加:
<gpx>
<wpt lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</wpt>
<wpt lat="52.100" lon="-1.100">
<time>2016-09-23 23:39:00</time>
</wpt>
<rte>
<rtept lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</rtept>
<rtept lat="52.100" lon="-1.100">
<time>2016-09-23 23:39:00</time>
</rtept>
</rte>
</gpx>
我很想听听任何建议;关于如何实现这一目标的提示或技巧。
检查 blnFileExists
没有用,与 rte
无关。先删除以下部分。
'Append "rte" element only once'
If blnFileExists = True Then
Set objRte = objDom.documentElement
Else
Set objRte = objDom.createElement("rte")
objGpx.appendChild objRte
End If
相反,您需要确保文档中有 rte
。
要检查节点是否存在,您可以使用selectSingleNode。它只是 returns 第一个匹配的对象。如果没有节点匹配表达式,returns Nothing
.
'Append "rte" element only once'
Set objRte = objGpx.SelectSingleNode("rte")
If objRte Is Nothing Then ' rte does not exist
Set objRte = objDom.createElement("rte")
objGpx.appendChild objRte
End If
更新#1
ASP 文件:
<%
' junk variables required in the function
Dim location_x, location_y, date_and_time
location_x = 56
location_y = 43
date_and_time = Now
'calling function twice
'will result an example.xml file near the asp file
LoadObjecttoXML Server.Mappath("."), "example.xml"
LoadObjecttoXML Server.Mappath("."), "example.xml"
Function LoadObjecttoXML(strXMLFilePath, strFileName)
Dim objDom
Dim objGpx
Dim objWpt
Dim objRte
Dim objRtept
Dim objDateTime
Dim objattLat
Dim objattLon
Dim objPI
Dim blnFileExists
'Instantiate the Microsoft XMLDOM
Set objDom = server.CreateObject("Microsoft.XMLDOM")
objDom.preserveWhiteSpace = True
blnFileExists = objDom.Load(strXMLFilePath & "\" & strFileName)
If blnFileExists = True Then
Set objGpx = objDom.documentElement
Else
'GPX root element and append it to the XML document.
Set objGpx = objDom.createElement("gpx")
objDom.appendChild objGpx
End If
Set objWpt = objDom.createElement("wpt")
'Create "Lat" attribute'
Set objattLat = objDom.createAttribute("lat")
objattLat.Text = (location_x)
objWpt.setAttributeNode objattLat
'Create "Lon" attribute'
Set objattLon = objDom.createAttribute("lon")
objattLon.Text = (location_y)
objWpt.setAttributeNode objattLon
'Create "date_and_time" element'
Set objDateTime = objDom.createElement("time")
objDateTime.Text = (date_and_time)
'Append "wpt" element as a child container element "gpx".'
objGpx.appendChild objWpt
'Append the "time" element as a child of the "wpt" element'
objWpt.appendChild objDateTime
'Append "rte" element only once'
Set objRte = objGpx.SelectSingleNode("rte")
If objRte Is Nothing Then ' rte does not exist
Set objRte = objDom.createElement("rte")
objGpx.appendChild objRte
End If
Set objRtept = objDom.createElement("rtept")
'Create "Lat" attribute'
Set objattLat = objDom.createAttribute("lat")
objattLat.Text = (location_x)
objRtept.setAttributeNode objattLat
'Create "Lon" attribute'
Set objattLon = objDom.createAttribute("lon")
objattLon.Text = (location_y)
objRtept.setAttributeNode objattLon
'Create "date_and_time" element'
Set objDateTime = objDom.createElement("time")
objDateTime.Text = (date_and_time)
'Append "rtept" element as a child container element "rte".'
objRte.appendChild objRtept
'Append the "time" element as a child of the "rtept" element'
objRtept.appendChild objDateTime
If blnFileExists = False Then
'Create the xml processing instruction - and append to XML file
Set objPI = objDom.createProcessingInstruction("xml", "version='1.0'")
objDom.insertBefore objPI, objDom.childNodes(0)
End If
'Save the XML document.
objDom.save strXMLFilePath & "\" & strFileName
Set objDom = Nothing
Set objGpx = Nothing
Set objWpt = Nothing
Set objRte = Nothing
Set objRtept = Nothing
Set objDateTime = Nothing
Set objattLat = Nothing
Set objattLon = Nothing
Set objPI = Nothing
Set blnFileExists = Nothing
End Function
%>
example.xml 输出(手动美化):
<?xml version="1.0"?>
<gpx>
<wpt lat="56" lon="43">
<time>26.09.2016 16:08:49</time>
</wpt>
<rte>
<rtept lat="56" lon="43">
<time>26.09.2016 16:08:49</time>
</rtept>
<rtept lat="56" lon="43">
<time>26.09.2016 16:08:49</time>
</rtept>
</rte>
<wpt lat="56" lon="43">
<time>26.09.2016 16:08:49</time>
</wpt>
</gpx>
我有以下 asp-经典代码,它将 3 个变量附加到 XML 文档中,'location_x'、'location_y' 和 'date_and_time'。
ASP-经典代码 - 创建或附加现有 XML 文档。
Function LoadObjecttoXML(strXMLFilePath, strFileName)
Dim objDom
Dim objGpx
Dim objWpt
Dim objRte
Dim objRtept
Dim objDateTime
Dim objattLat
Dim objattLon
Dim objPI
Dim blnFileExists
'Instantiate the Microsoft XMLDOM
Set objDom = server.CreateObject("Microsoft.XMLDOM")
objDom.preserveWhiteSpace = True
blnFileExists = objDom.Load(strXMLFilePath & "\" & strFileName)
If blnFileExists = True Then
Set objGpx = objDom.documentElement
Else
'GPX root element and append it to the XML document.
Set objGpx = objDom.createElement("gpx")
objDom.appendChild objGpx
End If
Set objWpt = objDom.createElement("wpt")
'Create "Lat" attribute'
Set objattLat = objDom.createAttribute("lat")
objattLat.Text = (location_x)
objWpt.setAttributeNode objattLat
'Create "Lon" attribute'
Set objattLon = objDom.createAttribute("lon")
objattLon.Text = (location_y)
objWpt.setAttributeNode objattLon
'Create "date_and_time" element'
Set objDateTime = objDom.createElement("time")
objDateTime.Text = (date_and_time)
'Append "wpt" element as a child container element "gpx".'
objGpx.appendChild objWpt
'Append the "time" element as a child of the "wpt" element'
objWpt.appendChild objDateTime
'Append "rte" element only once'
If blnFileExists = True Then
Set objRte = objDom.documentElement
Else
Set objRte = objDom.createElement("rte")
objGpx.appendChild objRte
End If
Set objRtept = objDom.createElement("rtept")
'Create "Lat" attribute'
Set objattLat = objDom.createAttribute("lat")
objattLat.Text = (location_x)
objRtept.setAttributeNode objattLat
'Create "Lon" attribute'
Set objattLon = objDom.createAttribute("lon")
objattLon.Text = (location_y)
objRtept.setAttributeNode objattLon
'Create "date_and_time" element'
Set objDateTime = objDom.createElement("time")
objDateTime.Text = (date_and_time)
'Append "rtept" element as a child container element "rte".'
objRte.appendChild objRtept
'Append the "time" element as a child of the "rtept" element'
objRtept.appendChild objDateTime
If blnFileExists = False Then
'Create the xml processing instruction - and append to XML file
Set objPI = objDom.createProcessingInstruction("xml", "version='1.0'")
objDom.insertBefore objPI, objDom.childNodes(0)
End If
'Save the XML document.
objDom.save strXMLFilePath & "\" & strFileName
Set objDom = Nothing
Set objGpx = Nothing
Set objWpt = Nothing
Set objRte = Nothing
Set objRtept = Nothing
Set objDateTime = Nothing
Set objattLat = Nothing
Set objattLon = Nothing
Set objPI = Nothing
Set blnFileExists = Nothing
End Function
On Error Resume Next
'File path c:\
LoadObjecttoXML "c:\Inetpub\wwwroot\xml","doc.xml"
'error check
If err.number <> 0 then
Response.write("Error: " & err.number )
Else
Response.write("Success!")
End If
我遇到的问题是当我第二次追加变量时,追加的 XML 没有放在正确的元素中。
例如,XML 代码在第一次追加时看起来像这样:
<gpx>
<wpt lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</wpt>
<rte>
<rtept lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</rtept>
</rte>
</gpx>
第二次追加时:
<gpx>
<wpt lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</wpt>
<rte>
<rtept lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</rtept>
</rte>
<wpt lat="52.100" lon="-1.100">
<time>2016-09-23 23:39:00</time>
</wpt>
<rte>
<rtept lat="52.100" lon="-1.100">
<time>2016-09-23 23:39:00</time>
</rtept>
</rte>
</gpx>
我希望 XML 像这样附加:
<gpx>
<wpt lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</wpt>
<wpt lat="52.100" lon="-1.100">
<time>2016-09-23 23:39:00</time>
</wpt>
<rte>
<rtept lat="52.000" lon="-1.000">
<time>2016-09-23 23:38:00</time>
</rtept>
<rtept lat="52.100" lon="-1.100">
<time>2016-09-23 23:39:00</time>
</rtept>
</rte>
</gpx>
我很想听听任何建议;关于如何实现这一目标的提示或技巧。
检查 blnFileExists
没有用,与 rte
无关。先删除以下部分。
'Append "rte" element only once'
If blnFileExists = True Then
Set objRte = objDom.documentElement
Else
Set objRte = objDom.createElement("rte")
objGpx.appendChild objRte
End If
相反,您需要确保文档中有 rte
。
要检查节点是否存在,您可以使用selectSingleNode。它只是 returns 第一个匹配的对象。如果没有节点匹配表达式,returns Nothing
.
'Append "rte" element only once'
Set objRte = objGpx.SelectSingleNode("rte")
If objRte Is Nothing Then ' rte does not exist
Set objRte = objDom.createElement("rte")
objGpx.appendChild objRte
End If
更新#1
ASP 文件:
<%
' junk variables required in the function
Dim location_x, location_y, date_and_time
location_x = 56
location_y = 43
date_and_time = Now
'calling function twice
'will result an example.xml file near the asp file
LoadObjecttoXML Server.Mappath("."), "example.xml"
LoadObjecttoXML Server.Mappath("."), "example.xml"
Function LoadObjecttoXML(strXMLFilePath, strFileName)
Dim objDom
Dim objGpx
Dim objWpt
Dim objRte
Dim objRtept
Dim objDateTime
Dim objattLat
Dim objattLon
Dim objPI
Dim blnFileExists
'Instantiate the Microsoft XMLDOM
Set objDom = server.CreateObject("Microsoft.XMLDOM")
objDom.preserveWhiteSpace = True
blnFileExists = objDom.Load(strXMLFilePath & "\" & strFileName)
If blnFileExists = True Then
Set objGpx = objDom.documentElement
Else
'GPX root element and append it to the XML document.
Set objGpx = objDom.createElement("gpx")
objDom.appendChild objGpx
End If
Set objWpt = objDom.createElement("wpt")
'Create "Lat" attribute'
Set objattLat = objDom.createAttribute("lat")
objattLat.Text = (location_x)
objWpt.setAttributeNode objattLat
'Create "Lon" attribute'
Set objattLon = objDom.createAttribute("lon")
objattLon.Text = (location_y)
objWpt.setAttributeNode objattLon
'Create "date_and_time" element'
Set objDateTime = objDom.createElement("time")
objDateTime.Text = (date_and_time)
'Append "wpt" element as a child container element "gpx".'
objGpx.appendChild objWpt
'Append the "time" element as a child of the "wpt" element'
objWpt.appendChild objDateTime
'Append "rte" element only once'
Set objRte = objGpx.SelectSingleNode("rte")
If objRte Is Nothing Then ' rte does not exist
Set objRte = objDom.createElement("rte")
objGpx.appendChild objRte
End If
Set objRtept = objDom.createElement("rtept")
'Create "Lat" attribute'
Set objattLat = objDom.createAttribute("lat")
objattLat.Text = (location_x)
objRtept.setAttributeNode objattLat
'Create "Lon" attribute'
Set objattLon = objDom.createAttribute("lon")
objattLon.Text = (location_y)
objRtept.setAttributeNode objattLon
'Create "date_and_time" element'
Set objDateTime = objDom.createElement("time")
objDateTime.Text = (date_and_time)
'Append "rtept" element as a child container element "rte".'
objRte.appendChild objRtept
'Append the "time" element as a child of the "rtept" element'
objRtept.appendChild objDateTime
If blnFileExists = False Then
'Create the xml processing instruction - and append to XML file
Set objPI = objDom.createProcessingInstruction("xml", "version='1.0'")
objDom.insertBefore objPI, objDom.childNodes(0)
End If
'Save the XML document.
objDom.save strXMLFilePath & "\" & strFileName
Set objDom = Nothing
Set objGpx = Nothing
Set objWpt = Nothing
Set objRte = Nothing
Set objRtept = Nothing
Set objDateTime = Nothing
Set objattLat = Nothing
Set objattLon = Nothing
Set objPI = Nothing
Set blnFileExists = Nothing
End Function
%>
example.xml 输出(手动美化):
<?xml version="1.0"?>
<gpx>
<wpt lat="56" lon="43">
<time>26.09.2016 16:08:49</time>
</wpt>
<rte>
<rtept lat="56" lon="43">
<time>26.09.2016 16:08:49</time>
</rtept>
<rtept lat="56" lon="43">
<time>26.09.2016 16:08:49</time>
</rtept>
</rte>
<wpt lat="56" lon="43">
<time>26.09.2016 16:08:49</time>
</wpt>
</gpx>