以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  关于asp 读取xml中出现的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=63839)


--  作者:hellolans
--  发布时间:6/18/2008 2:33:00 PM

--  关于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没接触过,网上查询xml好像第一行应为
<?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")
If Err.Number=-2147221005 Then
Response.Write "<div align='center'>非常遗憾,您的主机不支持ADODB.Stream,不能使用本程序</div>"
Err.Clear
Response.End
End If
With objStream
.Type = 2
.Mode = 3
.Open
.LoadFromFile Server.MapPath(File)
If Err.Number<>0 Then
Response.Write "<div align='center'>文件<font color='#ff0000'>"&File&"</font>无法被打开,请检查是否存在!</font></div>"
Err.Clear
Response.End
End If
.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)&"
"
    Next
    Set objRoot=Nothing
    Set objXML=Nothing


[此贴子已经被作者于2008-6-20 20:34:41编辑过]

--  作者:hellolans
--  发布时间:6/18/2008 10:29:00 PM

--  
有人愿意帮忙吗? 愿意支付酬劳,QQ: 3 8 6 0 1 9 7
--  作者:Qr
--  发布时间:6/18/2008 11:21:00 PM

--  
测试程序运行正常,运行结果为:
site_info(0)=1
site_info(1)=2
说明bb.xml可以正常读取,无须记事本另存。
怀疑你的aa.xml的文件编码可能是UTF-8,如果不是这个原因,暂时看不出问题。
--  作者:hellolans
--  发布时间:6/18/2008 11:33:00 PM

--  
谢谢Qr, 如果aa.xml为UTF-8的编码格式的话我该怎么做才能正常读取由aa.xml内容构成的bb.xml呢
--  作者:hellolans
--  发布时间:6/18/2008 11:54:00 PM

--  
问题的确是出在aa.xml这个源文件的编码格式上,如果首先记事本打开原来的aa.xml文件再保存的话bb.xml就能正常读取了,怎么样才能知道aa.xml的编码格式呢,如果知道aa.xml的编码格式后是不是修改上面GB2312为aa.xml相同格式就行了
--  作者:Qr
--  发布时间:6/18/2008 11:55:00 PM

--  
两种方法,
1、让你的程序导出gb2312编码的文件,文件编码为ANSI
2、将XML的首行改为<?xml version="1.0" encoding="UTF-8"?>,bb.xml的文件编码也同为UTF-8。

文件编码可用记事本打开后“另存为”,看其编码为当前文件编码。


--  作者:hellolans
--  发布时间:6/19/2008 12:18:00 AM

--  
<%
'获取aa.xml内容

txtcon=LoadFile("aa.xml")

'生成bb.xml
 
call SaveToFile(txtcon,"bb.xml")


Function LoadFile(File)
Dim objStream
On Error Resume Next
Set objStream = Server.CreateObject("ADODB.Stream")
If Err.Number=-2147221005 Then
Response.Write "<div align='center'>非常遗憾,您的主机不支持ADODB.Stream,不能使用本程序</div>"
Err.Clear
Response.End
End If
With objStream
.Type = 2
.Mode = 3
.Open
.LoadFromFile Server.MapPath(File)
If Err.Number<>0 Then
Response.Write "<div align='center'>文件<font color='#ff0000'>"&File&"</font>无法被打开,请检查是否存在!</font></div>"
Err.Clear
Response.End
End If
.Charset = "gb2312"
.Position = 2
LoadFile = .ReadText
.Close
End With
Set objStream = Nothing
End Function

Sub SaveToFile(strBody,File)
    Dim objStream
    On Error Resume Next
    Set objStream = Server.CreateObject("ADODB.Stream")
    If Err.Number=-2147221005 Then
        Response.Write "<div align='center'>非常遗憾,您的主机不支持ADODB.Stream,不能使用本程序</div>"
        Err.Clear
        Response.End
    End If
    With objStream
        .Type = 2
        .Open
        .Charset = "gb2312"
        .Position = objStream.Size
  .WriteText = "<?xml version=""1.0"" encoding=""ANSI""?>"&vbcrlf     
        .WriteText = strBody
  
        .SaveToFile Server.MapPath(File),2
        .Close
    End With
    Set objStream = Nothing
End Sub

'读取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
    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)&"
"
    Next
    Set objRoot=Nothing
    Set objXML=Nothing

%>

上面这样试了不行

Sub SaveToFile(strBody,File)里面
Charset = "gb2312"
Charset = "UTF-8"

<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="ANSI"?>

aa.xml的编码格式是 ANSI

都试了不行,愁死我了

Qr版主,商量一下,我这里也没上传权限,能QQ给你传一下aa.xml的源文件帮我试试吗


--  作者:Qr
--  发布时间:6/19/2008 1:15:00 AM

--  
<?xml version="1.0" encoding="ANSI"?>没有这种用法,对应的改encoding为iso-8859-1才正确。
我没有改你任何代码,纯粹复制、粘贴,用记事本保存文件,一切OK!

你用记事本打开aa.xml,然后“另存为”,查看“另存为”对话框窗口中的编码是“ANSI”还是“UTF-8”,在此贴出来。或者直接把文件打包,发到我的EMAIL中。
睡觉咯,有事明天再说,呵呵!


--  作者:hellolans
--  发布时间:6/19/2008 1:47:00 AM

--  
非常感谢
--  作者:hellolans
--  发布时间:6/20/2008 8:31:00 PM

--  
Qr版主,这个aa.xml用无组件上传到服务器后又不能正常读了
提示   缺少对象: '[object]'
response.write ""& xml.selectsinglenode("//COMMON").text &" <br>"  这句报错

--  作者:Qr
--  发布时间:6/21/2008 12:00:00 PM

--  
请注意大小写
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
125.000ms