打印

[xml] 求助:asp读取 xml中遇到的问题(可以支付酬劳)

我这里有一个其他程序导出的aa.xml文件,内容如下:
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="zh-CN">
      <xs:complexType>
        <xs:element name="a1" type="xs:string" minOccurs="0" />
        <xs:element name="a2" type="xs:string" minOccurs="0" />
        ........
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <COMMON>
    <aa>1 </aa>
    <bb>2 </bb>
  </COMMON>
</NewDataSet>

对于xml没接触过,想获取COMMON节点的内容,好像见到说第一行要有
<?xml version="1.0" encoding="gb2312"?>

于是通过以下先获取aa.xml内容然后再生成bb.xml的方式加入第一行
Function LoadFile(file)
Dim objStream
On Error Resume Next
Set objStream = Server.CreateObject("ADODB.Stream")
With objStream
.Type = 2
.Mode = 3
.Open
.LoadFromFile Server.MapPath(File)
.Charset = "GB2312"
.Position = 2
LoadFile = .ReadText
.Close
End With
Set objStream = Nothing
End Function

'通过LoadFile获取aa.xml文件内容
xmltxt=LoadFile("aa.xml")


'生成bb.xml
xmlfile=server.mappath("bb.xml")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile(xmlfile,True)
MyFile.WriteLine(" <?xml version=""1.0"" encoding=""gb2312""?>")
MyFile.WriteLine(xmltxt)
MyFile.Close

现在出现的问题是:
我在读取这个bb.xml内容的时候报错,但是如果把bb.xml用记事本打开然后什么都不动直接再保存一下就能正常使用了,实际要求中没办法做到将每个文件都进行打开保存这样操作一遍,不知道问题出在哪,弄了两天了都没解决,请各位帮忙指点一下.

另外如果我直接生成bb.xml内容的话能读
'生成bb.xml及内容
xmlfile=server.mappath("bb.xml")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile(xmlfile,True)
MyFile.WriteLine(" <NewDataSet>")
MyFile.WriteLine(" <COMMON>")
MyFile.WriteLine(" <aa>测试 </aa>")
MyFile.WriteLine(" <bb>测试1 </bb>")
MyFile.WriteLine(" </COMMON>")
MyFile.WriteLine(" </NewDataSet>")
MyFile.Close

'读取bb.xml
SettingFile="bb.xml"
Dim objXML,objRoot,Total,I
Set objXML=Server.CreateObject("Microsoft.XMLDOM")
objXML.async=False
objXML.load (Server.Mappath(SettingFile))

Set objRoot=objXML.selectsinglenode("NewDataSet/COMMON")
    if isobject(objRoot)=false then
      Response.write "文件读取失败"
    end if

    Total=objRoot.childnodes.length  '//就是这句报错: (0x800A01A8)缺少对象

    ReDim Site_Info(Total-1)
    For I=0 To Total-1
    Site_info(i)=objRoot.childnodes(i).text
    Response.Write "site_info("&i&")="&site_info(i)&" <br>"
    Next
    Set objRoot=Nothing
    Set objXML=Nothing

看上去问题应该出在
...
MyFile.WriteLine(xmltxt)
....
xmltxt是通过ADODB.Stream获取的后赋值的一个变量,我用FSO也试过,仍然存在上述问题,是XML编码格式的问题? 为什么同样方式生成的xml文件(内容是直接写的不是通过赋值到变量)就行呢,希望能得到指点,谢谢!

有人愿意帮忙吗? 愿意支付酬劳,QQ: 3 8 6 0 1 9 7

[ 本帖最后由 hellolans 于 2008-6-18 22:32 编辑 ]
Set fso = CreateObject("Scripting.FileSystemObject")
Set abc = fso.GetFile("x:\xx.xml")
abc.Copy ("y:\yy.xml")

楼主,我看你用ADODB.Stream读取文件然后再创建是没有什么条件筛选的,为什么不直接复制呢?

另:“<?xml version=""1.0"" encoding=""gb2312""?>”并不影响你用ASP读取XML文件
你最好检查一下是不是在读取文件的时候路径出错了。
可以xmlobj.load("文件的绝对路径")试一下。
我觉得没有读到文件的可能性很大。

可以用下面的SUB过程检测文件是否读取到
复制内容到剪贴板
代码:
        
        ............
        Public Sub loadXml
                xmlfilepath=server.MapPath("文件路径")
                Set xmlDom=server.CreateObject("Microsoft.XMLDOM")
                    xmlDom.async=false
                If not Eval(xmlDom.load(xmlfilepath)) then
                    response.Write "实例化对象错误:----加载数据文件错误!"
                    response.End
                Else
                    ......
                End If
        End Sub
        ............
[ 本帖最后由 loveayao 于 2008-9-18 10:50 编辑 ]
本评论乃个人意见,如有雷同,纯属巧合!