请教这里所有的朋友:我用xsl嵌入XML文件中,生成了一个表单页面,但为何...

HONGDUN 2003-09-28 06:12:51
请教这里所有的朋友:我用xsl嵌入XML文件中,生成了一个表单页面,但为何我按提交之后,跳转到另外一些,用
for i=1 to Request.Form.Count
Request.From(i)
next
显示出来的都是乱码。
还有一个问题就是,在遍历的时候到了Request.Form(i)这一项都是没有内容的。。好奇,请高手给我指点一下。
附所有源码:
-----------------------------------------------------------------------
txl.xml
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type='text/xsl' href='txl.xsl'?>
<通讯录>
<field id="姓名" orders="1">
<field_value>庄扬</field_value>
</field>
<field id="性别" orders="2">
<field_value>男</field_value>
</field>
<field id="地址" orders="3">
<field_value>福州网龙(中国)公司</field_value>
</field>
<field id="工作单位" orders="4">
<field_value>福州网龙(中国)公司</field_value>
</field>
<field id="电话" orders="5">
<field_value>13003820386</field_value>
</field>
<field id="电子邮件" orders="6">
<field_value>hongdui@sina.com</field_value>
</field>
</通讯录>
------------------------------------------------------------------

------------------------------------------------------------------
txl.xsl
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/通讯录">
<html>
<head>
<title>xsl演示2</title>
</head>
<body>
<form action="optxml.asp?action=update" method="post">
<table border="1" width="300" align="center">
<tr height="23" bgcolor="#efefef">
<td colspan="2" align="center">通讯录</td>
</tr>
<xsl:for-each select="field">
<tr>
<td><xsl:value-of select="@id"></xsl:value-of>:</td>
<td>
<xsl:element name="input">
<xsl:attribute name="input">text</xsl:attribute>
<xsl:attribute name="id">
<xsl:value-of select="@id"></xsl:value-of>
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="@id"></xsl:value-of>
</xsl:attribute> <xsl:attribute name="value">
<xsl:value-of select="field_value"></xsl:value-of>
</xsl:attribute>
</xsl:element>
<td>
</tr>
</xsl:for-each>
<tr>
<td colspan="2" align="center">
<xsl:element name="input">
<xsl:attribute name="id">btnsave</xsl:attribute>
<xsl:attribute name="type">submit</xsl:attribute>
<xsl:attribute name="value">提 交</xsl:attribute>
<xsl:attribute name="name">btnsave</xsl:attribute>
</xsl:element>
</td>
</tr>
<table>
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
------------------------------------------------------------------


------------------------------------------------------------------
optxml.asp
<%
option explicit

Dim xmlDom
Dim xslDom
Dim xmlRoot
Dim xmlField
Dim strAction
Dim i


'----------更新XML-----------
Sub UpdateXml(strXmlName)
Set xmlDom = Server.CreateObject("Microsoft.xmlDOM")
xmlDom.async = false
xmlDom.load(strXmlName)
If xmlDom.readyState=4 Then
If xmlDom.parseError.errorCode<>0 Then
Response.Write xmlDom.parseError.reason
Else
Set xmlRoot = xmlDom.documentElement
For i= 1 To Request.Form.Count
If inStr(1,Request.Form.Key(i),"btn")=0 Then
Set xmlField = xmlRoot.selectSingleNode("/field[@id='" & Request.Form.Key(i) & "']/field_value")
xmlField.Text = ""&Request.Form(i)&""
End If
Next
xmlDom.save strXmlName
Set xmlRoot = nothing
Set xmlField = nothing
End If
End If
Set xmlDom = nothing
End Sub


%>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; chaRset=gb2312-80">
<META content="text/html; chaRset=gb2312-80" http-equiv=Content-Type>
<!--<link href = "style.css" rel = "stylesheet" type = "text/css">-->
<title>XML操作</title>
</head>
<body>
<%
strAction = Request("action")
Select Case strAction
Case "" Call ViewXml(txl.xml,updatetxl.xsl)
Case "update" Call UpdateXml(Server.MapPath("txl.xml"))
End Select
%>
</body>
</html>
------------------------------------------------------------------


...全文
51 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
HONGDUN 2003-09-30
  • 打赏
  • 举报
回复
我有改过用Set xmlField = xmlRoot.selectSingleNode("/通讯录/field[@id='" & Request.Form.Key(i) & "']/field_value")
依旧不是的。
wuxk 2003-09-30
  • 打赏
  • 举报
回复
就是optxml.asp有错误,这个selectSingleNode用错了。
下面是你原来的代码:
Set xmlField = xmlRoot.selectSingleNode("/field[@id='" & Request.Form.Key(i) & "']/field_value")
如果是你原来的xml文件,就应该写成:
Set xmlField = xmlRoot.selectSingleNode("/通讯录/field[@id='" & Request.Form.Key(i) & "']/field_value")

否则,这个xmlField就得不到你要的field_value节点了。

HONGDUN 2003-09-30
  • 打赏
  • 举报
回复
To wuxk(偷偷的我走了,正如我偷偷的来了):

optxml.asp这一页没有错的。关键是用txl.xml结合txl.xsl来显示表单并提交的时候才会出错错误。
Microsoft VBScript 运行时错误 错误 '800a01a8'

缺少对象: 'xmlField'

/xmltest/1/optxml/optxml.asp,行30
HONGDUN 2003-09-29
  • 打赏
  • 举报
回复
昨晚到http://lucky.myrice.com/xml/editxml.html看了这篇文章后,在txl.xsl中加了下面这一句,显示出来的就不是乱码了。
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

但如果用txl.xml来提交表单始终不行。用optxlml.asp来提交表单是没有错的。请大伙有空的话再帮我看看。谢谢!!

wuxk 2003-09-29
  • 打赏
  • 举报
回复
不好意思,请把 optxml.asp 的代码换一下,我没来得及细看。

<%
option explicit
Dim xmlDom
Dim xslDom
Dim xmlRoot
Dim xmlField
Dim strAction
Dim i

'----------更新XML-----------
Sub UpdateXml(strXmlName)
Set xmlDom = Server.CreateObject("Microsoft.xmlDOM")
xmlDom.async = false
xmlDom.load(strXmlName)
If xmlDom.readyState=4 Then
If xmlDom.parseError.errorCode<>0 Then
Response.Write xmlDom.parseError.reason
Else
Set xmlRoot = xmlDom.documentElement
For i= 1 To Request.Form.Count
If inStr(1,Request.Form.Key(i),"btn")=0 Then
Set xmlField = xmlRoot.selectSingleNode("/root/field[@id='" & Request.Form.Key(i) & "']/field_value")
xmlField.Text = "" & Request.Form(i) & ""
End If
Next
xmlDom.save strXmlName
Set xmlRoot = nothing
Set xmlField = nothing
ViewXml
End If
End If
Set xmlDom = nothing
End Sub

sub ViewXml()
set xmlDom = Server.CreateObject("Microsoft.XMLDOM")
set xslDom = Server.CreateObject("Microsoft.XMLDOM")
xmlDom.async = false
xslDom.async = false
xmlDom.load(Server.mappath("txl.xml"))
xslDom.load(Server.mappath("txl.xsl"))
if xmlDom.readyState = 4 and xslDom.readyState = 4 then
if xmlDom.parseError.errorCode <> 0 or xslDom.parseError.errorCode <> 0 then
response.write xmlDom.parseError.reason & "<br>"
response.write xslDom.parseError.reason
else
Response.write xmlDom.transFormNode(xsldom)
end if
end if
set xmlDom = nothing
set xslDom = nothing
end sub
%>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<META content="text/html;charset=gb2312" http-equiv="Content-Type">
<title>XML操作</title>
</head>
<body>
<%
strAction = Request("action")
Select Case strAction
Case ""
Call ViewXml()
Case "update"
Call UpdateXml(Server.MapPath("txl.xml"))
End Select
%>
</body>
</html>
wuxk 2003-09-29
  • 打赏
  • 举报
回复
txl.xml

<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type='text/xsl' href='txl.xsl'?>
<root>
<field id="姓名" orders="1">
<field_value>aaa</field_value>
</field>
<field id="性别" orders="2">
<field_value>bbb</field_value>
</field>
<field id="地址" orders="3">
<field_value>ccc</field_value>
</field>
<field id="单位" orders="4">
<field_value>dddd</field_value>
</field>
<field id="电话" orders="5">
<field_value>223344</field_value>
</field>
<field id="电子邮件" orders="6">
<field_value>aaa@123.com</field_value>
</field>
</root>

txl.xsl

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/root">
<html>
<head>
<title>xsl演示2</title>
<meta http-equiv="contentType" content="text/html;charset=gb2312" />
</head>
<body>
<form action="optxml.asp?action=update" method="post">
<table border="1" width="300" align="center">
<tr height="23" bgcolor="#efefef">
<td colspan="2" align="center">输入表单</td>
</tr>
<xsl:for-each select="field">
<tr>
<td><xsl:value-of select="@id"></xsl:value-of>:</td>
<td>
<xsl:element name="input">
<xsl:attribute name="type">text</xsl:attribute>
<xsl:attribute name="id">
<xsl:value-of select="@id"></xsl:value-of>
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="@id"></xsl:value-of>
</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="field_value"></xsl:value-of>
</xsl:attribute>
</xsl:element>
</td>
</tr>
</xsl:for-each>
<tr>
<td colspan="2" align="center">
<xsl:element name="input">
<xsl:attribute name="id">btnsave</xsl:attribute>
<xsl:attribute name="type">submit</xsl:attribute>
<xsl:attribute name="value">提 交</xsl:attribute>
<xsl:attribute name="name">btnsave</xsl:attribute>
</xsl:element>
</td>
</tr>
</table>
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

optxml.asp

<%
option explicit
Dim xmlDom
Dim xslDom
Dim xmlRoot
Dim xmlField
Dim strAction
Dim i

'----------更新XML-----------
Sub UpdateXml(strXmlName)
Set xmlDom = Server.CreateObject("Microsoft.xmlDOM")
xmlDom.async = false
xmlDom.load(strXmlName)
If xmlDom.readyState=4 Then
If xmlDom.parseError.errorCode<>0 Then
Response.Write xmlDom.parseError.reason
Else
Set xmlRoot = xmlDom.documentElement
For i= 1 To Request.Form.Count
If inStr(1,Request.Form.Key(i),"btn")=0 Then
Set xmlField = xmlRoot.selectSingleNode("/root/field[@id='" & Request.Form.Key(i) & "']/field_value")
xmlField.Text = "" & Request.Form(i) & ""
End If
Next
xmlDom.save strXmlName
Set xmlRoot = nothing
Set xmlField = nothing
ViewXml
End If
End If
Set xmlDom = nothing
End Sub

sub ViewXml()
set xmlDom = Server.CreateObject("Microsoft.XMLDOM")
set xslDom = Server.CreateObject("Microsoft.XMLDOM")
xmlDom.async = false
xslDom.async = false
xmlDom.load(Server.mappath("txl.xml"))
xslDom.load(Server.mappath("txl.xsl"))
if xmlDom.readyState = 4 and xslDom.readyState = 4 then
if xmlDom.parseError.errorCode <> 0 or xslDom.parseError.errorCode <> 0 then
response.write xmlDom.parseError.reason & "<br>"
response.write xslDom.parseError.reason
else
Response.write xmlDom.transFormNode(xsldom)
end if
end if
set xmlDom = nothing
set xslDom = nothing
end sub
%>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<META content="text/html;charset=gb2312" http-equiv="Content-Type">
<title>XML操作</title>
</head>
<body>
<%
strAction = Request("action")
Select Case strAction
Case ""
Call ViewXml()
Case "update"
Call UpdateXml(Server.MapPath("txl.xml"))
End Select
%>
</body>
</html>
wuxk 2003-09-29
  • 打赏
  • 举报
回复
没有乱码。
liudong963 2003-09-29
  • 打赏
  • 举报
回复
我也遇到同样问题,使用了下面的代码一样无法解决。关注中
<form method="POST" action="xxx.asp" accept-charset="gb2312">
孟子E章 2003-09-28
  • 打赏
  • 举报
回复
For Each Item In Request.Form
Response.write Item & " = " & Request.Form(Item)
Next
孟子E章 2003-09-28
  • 打赏
  • 举报
回复
<form method="POST" action="xxx.asp" accept-charset="gb2312">

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧