【问题标题】:using POST to change an XML file?使用 POST 更改 XML 文件?
【发布时间】:2013-12-24 16:48:25
【问题描述】:

所以我正在开发一种新工具供我的办公室使用,它基本上只是一个网页,它呈现办公室地图并具有一些额外的功能。我的困惑在于为什么我试图让它可编辑。

我使用的服务器上有 ASP.NET(2.0.50727),我想我会使用它。

基本上,地图的每个部分都是可编辑的(办公室、打印机、墙壁等)。当您单击一个时(假设您在管理页面上),它会显示一个简单的 HTML 表单,其中包含所有适当的字段。单击“应用”,它会将其发布到 .aspx 页面,该页面应该更改相关的 XML 文档,然后将您转发回地图。

我似乎无法弄清楚的是整个 ASP.NET。经过几天的搜索/实验,我一无所获。到目前为止,我已经能够做到这一点:

<%@ Page Language="VB" %>
<!DOCTYPE html>
<html>
<body><%
dim format
format=Request.Form("Format") 'The format of the thing being edited. determines which .xml file to use
If format<>"" Then
      Response.Write(format)
End If

dim objectID
objectID=Request.Form("objectID")
If objectID<>"" Then
      Response.Write(objectID)
End If
XmlSource.XPath = format+"s/"+format+"[@objectID='"+objectID+"']"
XmlSource.DataFile = format+"s.xml"
%>
<form id="Form1" runat="server" >

      <asp:XmlDataSource
        runat="server"
        ID="XmlSource"
        EnableViewState="True"
        EnableCaching="False" />

      <asp:Repeater
        runat="server"
        ID="Repeater1"
        DataSourceID="XmlSource" >
          <ItemTemplate >
            <h1><%# XPath ("@type") %> </h1>
          </ItemTemplate>
      </asp:Repeater>
</form>
</body>
</html>

但是如果我手动设置 XPath 和数据文件,它要么吐出 每个 节点的“type”,或者如果我尝试使其动态化,它会吐出:'Object reference not set to an instance of an object'(我有多种格式,如房间、墙壁、打印机等,每种格式都有自己的 XML 文件),这正是我们所需要的。

我只是在这里寻找一些指导,因为我不知道自己在做什么。有什么想法吗?

编辑:大部分都想出来了。这是我的新代码:

<%@ Page LANGUAGE="VB" SMARTNAVIGATION="false" debug="true"%>
<%@ Import Namespace="System.Xml" %>

<script runat="server" >

  Private Sub Page_Load

    dim format
    format=Request.Form("format")
    If format<>"" Then
      Response.Write(format)
    End If
    XmlSource.DataFile = format+"s.xml"

    dim newObjectIDFromPOST
    newObjectIDFromPOST=Request.Form("objectID")
    If newObjectIDFromPOST<>"" Then
      Response.Write(newObjectIDFromPOST)
    End If

    dim oldObjectIDFromPOST
    oldObjectIDFromPOST=Request.Form("oldObjectID")
    If oldObjectIDFromPOST<>"" Then
      Response.Write(oldObjectIDFromPOST)
    End If

    Dim myXml As New XmlDocument

    myXml = CType(XmlSource.GetXmlDocument(), XmlDocument)
    Dim path As String = format+"s/"+format+"[@objectID='"+oldObjectIDFromPOST+"']"
    Dim node As XmlNode = myXml.SelectSingleNode(path)

    If format = "room" Then
      node.Attributes("objectID").Value = newObjectIDFromPOST
    End If

    XmlSource.Save()
    Repeater1.DataBind()

  End Sub 'on page load
</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="Form1" runat="server" >

      <asp:XmlDataSource
        runat="server"
        ID="XmlSource"
        EnableViewState="True"
        EnableCaching="False" />

        <asp:Repeater
        runat="server"
        ID="Repeater1"
        DataSourceID="XmlSource" >
          <ItemTemplate >
            <h1><%# XPath ("@objectID") %> </h1>
          </ItemTemplate>
      </asp:Repeater>
</form>
</body>

【问题讨论】:

  • 为澄清起见,您可以直观地看到您的办公室。单击此表示中的项目会弹出一个表单,允许您编辑所选对象的信息。更新的信息是否保存到 XML 文件(每个项目)?
  • 差不多。它是每个项目的type。所以所有“房间”对象都包含在“rooms.xml”中。保存部分还没有工作,因为我不知道我在做什么。
  • 如果我这样做,我会使用 HTML 和 CSS 来布置房间和对象,然后将 JavaScript 点击事件添加到将显示模式表单的对象。在保存表单时,我会使用 Ajax 将表单数据发送到服务器上的 Web 服务。然后,服务器将更改 rooms.xml 文件并将成功/失败返回给调用 Ajax 函数。
  • 好的,那该怎么做呢?
  • 您必须使用 .net 2 还是可以使用 4.x 和 mvc?

标签: asp.net xml xpath


【解决方案1】:

常规调试:页面中以下行的输出是什么?

Response.Write(format)

Response.Write(objectID)

添加以下几行怎么样? (我们需要找到为空的对象,并导致错误。)

XmlSource.XPath = format+"s/"+format+"[@objectID='"+objectID+"']"
Response.Write("[" + XmlSource.XPath + "]")
XmlSource.DataFile = format+"s.xml"
Response.Write("[" + XmlSource.DataFile + "]")

【讨论】:

  • 其实我想我只是想通了,至少对于在起始级别设置属性。我已经更新了我的代码。我至少应该能够从这里走出来。不过感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 2015-03-19
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
相关资源
最近更新 更多