热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在经典ASP中合并两个XML文件?-HowtomergetwoXMLfilesinclassicASP?

ImusingclassicASPinmyproject.IwanttomergetwoXMLstogether.HowdoIdothis?Belowism

I'm using classic ASP in my project. I want to merge two XMLs together. How do I do this? Below is my sample code:

我在我的项目中使用经典ASP。我想将两个XML合并在一起。我该怎么做呢?以下是我的示例代码:

XML 1



   
  Bob Dylan 
  USA 
  Columbia 
  10.90 
  1985 


   
  Bonnie Tyler 
  UK 
  CBS Records 
  9.90 
  1988 


   
  Dolly Parton 
  USA 
  RCA 
  9.90 
  1982 


XML2



   
  Gary Moore 
  UK 
  Virgin records 
  10.20 
  1990 


   
  Eros Ramazzotti 
  EU 
  BMG 
  9.90 
  1997 


   
  Bee Gees 
  UK 
  Polydor 
  10.90 
  1998 


This is ASP code I currently use:

这是我目前使用的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

But now I'm getting an error:

但现在我收到一个错误:

Microsoft Vbscript runtime error '800a01a8' 

Object required: 'documentElement'

3 个解决方案

#1


0  

Expanding on Jørn Schou-Rode's answer:

扩展JørnSchou-Rode的答案:

<%
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("", doc2.xml.Replace( "","").Replace("","") )

%>

This would replace the tag from doc1.xml with the doc2.xml without the first two lines, but again, would only work for this situation where you have these two xml files and they don't contain duplicate nodes.

这将使用doc2.xml替换doc1.xml中的标记而不使用前两行,但同样,仅适用于您拥有这两个xml文件并且不包含重复节点的情况。

You could read the files in using the FileSystemObject which would be faster, but the benefit of loading it in the DOM is that it would only load well formed xml.

您可以使用FileSystemObject读取文件,这会更快,但是在DOM中加载它的好处是它只能加载格式良好的xml。

#2


0  

Your basic approach should work. I suspect one of your documents does not load correctly because it is not well-formed or has an encoding error. Please check what this modification gives you:

你的基本方法应该有效。我怀疑您的某个文档无法正确加载,因为它格式不正确或编码错误。请检查此修改为您提供的内容:

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) & "
" End Sub

#3


0  

Disclaimer: This answer contains a "ghetto" solution to the problem in question. While it should work just fine for this particular problem, it will not solve any XML related problem.

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

Considering that you need simply need to concatenate the nodes right below the document node in the two documents, it should be trivial to solve the question using simple string manipulation, without parsing the actual XML. Just to get the idea:

考虑到您只需要在两个文档中的文档节点正下方连接节点,使用简单的字符串操作解决问题应该是微不足道的,而无需解析实际的XML。只是为了得到这个想法:

  1. Read all lines except the last one from 01.xml, and write them to your output stream.
  2. 从01.xml读取除最后一行之外的所有行,并将它们写入输出流。

  3. Read all lines except the first two from 02.xml, and write them to your output stream.
  4. 从02.xml读取除前两行之外的所有行,并将它们写入输出流。

My Vbscript is pretty rusty, but I believe something like this should cut it:

我的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

推荐阅读
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
author-avatar
西瓜246
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有