如何合并经典ASP中的两个XML文件?
我在我的项目中使用了经典的ASP。我想将两个XML合并在一起。我该怎么做呢?下面是我的示例代码:如何合并经典ASP中的两个XML文件?
XML 1
<CATALOG>
<CD>
<TITLE>1</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>2</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
<CD>
<TITLE>3</TITLE>
<ARTIST>Dolly Parton</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>RCA</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1982</YEAR>
</CD>
</CATALOG>
XML2
<CATALOG>
<CD>
<TITLE>4</TITLE>
<ARTIST>Gary Moore</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Virgin records</COMPANY>
<PRICE>10.20</PRICE>
<YEAR>1990</YEAR>
</CD>
<CD>
<TITLE>5</TITLE>
<ARTIST>Eros Ramazzotti</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>BMG</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1997</YEAR>
</CD>
<CD>
<TITLE>6</TITLE>
<ARTIST>Bee Gees</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Polydor</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1998</YEAR>
</CD>
</CATALOG>
这是ASP代码,我目前使用的:
Dim doc1 ''# As MSXML2.DOMDocument30
Dim doc2 ''# As MSXML2.DOMDocument30
Dim doc2Node ''# As MSXML2.IXMLDOMNode
Set doc1 = createobject("MSXML2.DOMDocument.3.0")
Set doc2 = createobject("MSXML2.DOMDocument.3.0")
doc1.Load "01.xml"
doc2.Load "02.xml"
For Each doc2Node In doc2.documentElement.childNodes
doc1.documentElement.appendChild doc2Node
Next
response.write doc1.xml
但现在我得到一个错误:
Microsoft VBScript runtime error '800a01a8' Object required: 'documentElement'
扩展在约恩休乌 - 罗德的回答是:
<%
Dim doc1 'As MSXML2.DOMDocument30
Dim doc2 'As MSXML2.DOMDocument30
Dim doc2Node 'As MSXML2.IXMLDOMNode
Set doc1 = createobject("MSXML2.DOMDocument.3.0")
Set doc2 = createobject("MSXML2.DOMDocument.3.0")
doc1.Load "01.xml"
doc2.Load "02.xml"
Response.Write (doc1.xml.Replace("</CATALOG>", doc2.xml.Replace("<?xml version="1.0" encoding="ISO-8859-1" ?>","").Replace("<CATALOG>",""))
%>
这从更换标签doc1.xml与doc2.xml没有前两行,但再次,只适用于这种情况下,你有这两个XML文件,他们不包含重复的节点。
您可以使用FileSystemObject读取这些文件,速度会更快,但将它加载到DOM中的好处是它只会加载格式良好的xml。
我尝试上面的代码,但错误是Microsoft VBScript运行时错误'800a01a8' 对象需要:'xml' – Alex 2010-03-24 17:35:44
声明:此答案包含针对相关问题的“贫民窟”解决方案。虽然它应该适用于这个特定的问题,但它会而不是解决任何XML相关的问题。
考虑到您只需要连接两个文档中文档节点正下方的节点,使用简单的字符串操作解决问题应该很简单,而不需要解析实际的XML。刚拿到的想法:
- 阅读所有行除了从
01.xml
最后一个,并写信给你的输出流。 - 请阅读所有行,除了前两个从
02.xml
,并将它们写入您的输出流。
我VBScript是非常生疏,但我相信这样的事情应该削减它:
Const ForReading = 1
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set textStream = objFSO.OpenTextFile(Server.MapPath("01.xml"), ForReading)
lastLine = ""
Do While Not textStream.AtEndOfStream
Response.Write lastLine
lastLine = TextStream.readline
Loop
Set textStream = objFSO.OpenTextFile(Server.MapPath("02.xml"), ForReading)
counter = 0
Do While Not textStream.AtEndOfStream
counter = counter + 1
If counter > 2 Then
Response.Write TextStream.readline
End If
Loop
为VBScript我尝试上面的代码,设置文本流= objFSO.OpenTextFile(使用Server.Mappath( “01.xml”),ForReading的,创建) 但我面临一个错误“Microsoft VBScript运行时错误'800a0005' 无效的过程调用或参数 ” – Alex 2010-03-24 17:32:36
@Alex:事实证明,必须手动定义ForReading常量。查看更新的代码示例(特别是第一行)。 – 2010-03-24 22:07:59
您的基本方法应该工作。我怀疑你的某个文档没有正确加载,因为它没有格式正确或者有编码错误。请检查一下这个修改为您提供:
Set doc1 = LoadXml("01.xml", True)
Set doc2 = LoadXml("02.xml", True)
''# ... all the rest of your stuff ...
Function LoadXml(XmlPath, FailOnError)
Dim xml, e
Set xml = Server.CreateObject("MSXML2.DOMDocument.3.0")
xml.Load XmlPath
Set e = xml.parseError
If e.errorCode <> 0 Then
DebugPrint "XML parsing error " & e.errorCode
DebugPrint "in file " & e.url
DebugPrint "on line: " & e.line & ", pos: " & e.linePos
DebugPrint "reason: " & e.reason
DebugPrint "source: " & e.srcText
If FailOnError Then Response.End
End If
Set LoadXml = xml
End Function
Sub DebugPrint(s)
Response.Write Server.HTMLEncode(s) & "<br>"
End Sub
备忘录:改变中的JavaScript代码 – YOU 2010-03-24 09:46:02