1

我有一个用 ASP.NET 用 VB.NET 编写的表单,它将用户数据写入 XML 文件。每次使用表单时,都会使用通过表单提供的数据生成一个新的 XML 文件。我的问题是我试图让 XML 输出类似于:

<PersonalData>
  <products>
    <product>
      <productID>1</productID>
      <productNumber>123456</productNumber>
    </product>
 </products>
  <customers>
     <customer>
        <LastName>Winchester</LastName>
        <FirstName>Sam</FirstName>
        <Address>1234 Elm RD</Address>
        <City>San Antonio</City>
        <State>Texas</State>
        <ZipCode>76345</ZipCode>
      </customer>
   </customers>
</PersonalData>

但是,我最终得到:

<PersonalData>
  <products>
    <product>
      <productID>1</productID>
      <productNumber>123456</productNumber>
      <customers>
        <customer>
          <LastName>Winchester</LastName>
          <FirstName>Sam</FirstName>
          <Address>1234 Elm RD</Address>
          <City>San Antonio</City>
          <State>Texas</State>
          <ZipCode>76345</ZipCode>
        </customer>
      </customers>
    </product>
  </products>
</PersonalData>

这是我的代码-按钮单击-:

 Public Sub Write_XML(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim textWriter As New XmlTextWriter(Server.MapPath("xml/PersonDataVI.xml"), Nothing)
        textWriter.Formatting = System.Xml.Formatting.Indented
        'Start New Document
        textWriter.WriteStartDocument()
        'Write a Comment
        textWriter.WriteComment("This is a comment")
        'Insert Start Element -root element node
        textWriter.WriteStartElement("PersonalData")
        'write the start element
        textWriter.WriteStartElement("products")
        'write the child start element
        textWriter.WriteStartElement("product")
        'Write ProductID Element and Data
        textWriter.WriteStartElement("productID", "")
        textWriter.WriteString(txtProductID.Text)
        textWriter.WriteEndElement()
        'Write ProductID Element and Data
        textWriter.WriteStartElement("productNumber", "")
        textWriter.WriteString(txtProductNum.Text)
        textWriter.WriteEndElement()
        'write the child element
        textWriter.WriteStartElement("customers")
        'write the child element
        textWriter.WriteStartElement("customer")
        'Write LastName Element and Data
        textWriter.WriteStartElement("LastName", "")
        textWriter.WriteString(txtLastName.Text)
        textWriter.WriteEndElement()
        'Write FirstName Element and Data
        textWriter.WriteStartElement("FirstName", "")
        textWriter.WriteString(txtFirstName.Text)
        textWriter.WriteEndElement()
        'Write Address Element and Data
        textWriter.WriteStartElement("Address", "")
        textWriter.WriteString(txtAddress.Text)
        textWriter.WriteEndElement()
        'Write City Element and Data
        textWriter.WriteStartElement("City", "")
        textWriter.WriteString(txtCity.Text)
        textWriter.WriteEndElement()
        'Write State Element and Data
        textWriter.WriteStartElement("State", "")
        textWriter.WriteString(txtState.Text)
        textWriter.WriteEndElement()
        'Write ZipCode Elment and Data
        textWriter.WriteStartElement("ZipCode", "")
        textWriter.WriteString(txtZipCode.Text)
        textWriter.WriteEndElement()
        'End Everything
        textWriter.WriteEndDocument()
        'Clean up
        textWriter.Flush()
        textWriter.Close()
        'Display the XML Document
        Response.Redirect(Server.MapPath("xml/PersonDataVI.xml"))
    End Sub

我在这里做错了什么?

4

3 回答 3

2

您缺少WriteEndElementforproductproducts

textWriter.WriteStartElement("productNumber", "")
textWriter.WriteString(txtProductNum.Text)
textWriter.WriteEndElement()

你还需要两个

textWriter.WriteEndElement()
于 2013-08-15T15:53:19.493 回答
0

为产品编号执行结束元素后,您将需要对结束元素进行另外两次调用。

Public Sub Write_XML(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim textWriter As New XmlTextWriter(Server.MapPath("xml/PersonDataVI.xml"), Nothing)
    textWriter.Formatting = System.Xml.Formatting.Indented
    'Start New Document
    textWriter.WriteStartDocument()
    'Write a Comment
    textWriter.WriteComment("This is a comment")
    'Insert Start Element -root element node
    textWriter.WriteStartElement("PersonalData")
    'write the start element
    textWriter.WriteStartElement("products")
    'write the child start element
    textWriter.WriteStartElement("product")
    'Write ProductID Element and Data
    textWriter.WriteStartElement("productID", "")
    textWriter.WriteString(txtProductID.Text)
    textWriter.WriteEndElement()
    'Write ProductID Element and Data
    textWriter.WriteStartElement("productNumber", "")
    textWriter.WriteString(txtProductNum.Text)
    textWriter.WriteEndElement()
    textWriter.WriteEndElement()
    textWriter.WriteEndElement()
    'write the child element
    textWriter.WriteStartElement("customers")
    'write the child element
    textWriter.WriteStartElement("customer")
    'Write LastName Element and Data
    textWriter.WriteStartElement("LastName", "")
    textWriter.WriteString(txtLastName.Text)
    textWriter.WriteEndElement()
    'Write FirstName Element and Data
    textWriter.WriteStartElement("FirstName", "")
    textWriter.WriteString(txtFirstName.Text)
    textWriter.WriteEndElement()
    'Write Address Element and Data
    textWriter.WriteStartElement("Address", "")
    textWriter.WriteString(txtAddress.Text)
    textWriter.WriteEndElement()
    'Write City Element and Data
    textWriter.WriteStartElement("City", "")
    textWriter.WriteString(txtCity.Text)
    textWriter.WriteEndElement()
    'Write State Element and Data
    textWriter.WriteStartElement("State", "")
    textWriter.WriteString(txtState.Text)
    textWriter.WriteEndElement()
    'Write ZipCode Elment and Data
    textWriter.WriteStartElement("ZipCode", "")
    textWriter.WriteString(txtZipCode.Text)
    textWriter.WriteEndElement()
    'End Everything
    textWriter.WriteEndDocument()
    'Clean up
    textWriter.Flush()
    textWriter.Close()
    'Display the XML Document
    Response.Redirect(Server.MapPath("xml/PersonDataVI.xml"))
End Sub
于 2013-08-15T15:50:40.473 回答
0

如果您使用的是 VB 9 或更高版本,请考虑使用 LINQ to XML 而不是显式编写器。有了它,你可以简单地做:

Dim myData = <PersonalData>
  <products>
    <product>
      <productID>1</productID>
      <productNumber>123456</productNumber>
    </product>
 </products>
  <customers>
     <customer>
        <LastName>Winchester</LastName>
        <FirstName>Sam</FirstName>
        <Address>1234 Elm RD</Address>
        <City>San Antonio</City>
        <State>Texas</State>
        <ZipCode>76345</ZipCode>
      </customer>
   </customers>
</PersonalData>

要插入值,只需像在 ASP.Net 中一样对它们进行转义:

<productID><% myProduct.ID %></productID>
于 2013-08-15T17:45:51.863 回答