2010-03-24 74 views
4

我在我的项目中使用了经典的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' 
+0

备忘录:改变中的JavaScript代码 – YOU 2010-03-24 09:46:02

回答

0

扩展在约恩休乌 - 罗德的回答是:

<% 
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。

+0

我尝试上面的代码,但错误是Microsoft VBScript运行时错误'800a01a8' 对象需要:'xml' – Alex 2010-03-24 17:35:44

0

声明:此答案包含针对相关问题的“贫民窟”解决方案。虽然它应该适用于这个特定的问题,但它会而不是解决任何XML相关的问题。

考虑到您只需要连接两个文档中文档节点正下方的节点,使用简单的字符串操作解决问题应该很简单,而不需要解析实际的XML。刚拿到的想法:

  1. 阅读所有行除了从01.xml最后一个,并写信给你的输出流。
  2. 请阅读所有行,除了前两个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 
+0

为VBScript我尝试上面的代码,设置文本流= objFSO.OpenTextFile(使用Server.Mappath( “01.xml”),ForReading的,创建)
但我面临一个错误“Microsoft VBScript运行时错误'800a0005' 无效的过程调用或参数 ” – Alex 2010-03-24 17:32:36

+0

@Alex:事实证明,必须手动定义ForReading常量。查看更新的代码示例(特别是第一行)。 – 2010-03-24 22:07:59

0

您的基本方法应该工作。我怀疑你的某个文档没有正确加载,因为它没有格式正确或者有编码错误。请检查一下这个修改为您提供:

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 
+0

我尝试上面的代码,设置doc1 = LoadXml(Server.MapPath(“01.xml”),True )设置doc2 = LoadXml(Server.MapPath(“02.xml”),True)
如何加载合并xml结果到网页? – Alex 2010-03-24 17:29:44

+0

我的关键是在实际合并之前。它是否显示错误? – Tomalak 2010-03-24 17:49:58