>백엔드 개발 >XML/RSS 튜토리얼 >XML 문서에 새 '레코드' 추가

XML 문서에 새 '레코드' 추가

黄舟
黄舟원래의
2017-02-11 15:54:381513검색

이 기사에 제공된 예는 HTML 형식 데이터를 XML로 저장하는 것과 유사합니다. 과거에는 양식이 제출되면 일반적으로 새 문서를 만들었습니다. 이제는 문서가 이미 존재하는 한 직접 추가할 수 있습니다. 이 기술의 사용은 기본 데이터를 생성하는 것과 유사합니다.

이전 기사에서는 XMLDOM을 사용하는 방법을 설명했습니다. 그럼 바로 이 글의 예시로 넘어가겠습니다.

가장 먼저 고려해야 할 것은 새 "레코드"를 추가하는 데 사용할 HTML 형식입니다. "HTML 양식 데이터를 XML로 저장" 예제에서는 이미 이 양식을 사용했으며 파일 이름만 변경했지만 코드는 동일합니다.

AddContact.html:

<html> 
  <head> 
   <title> Contact Information </title> 
  </head> 
  <body> 
   <form action="processAdd.asp" method="post">  
   <h3>Enter your contact information</h3>  
   First Name:  
   <input type="text" id="firstName" name="firstName"><br> Last Name:  
   <input type="text" id="lastName" name="lastName"><br> Address #1:  
   <input type="text" id="address1" name="address1"><br> Address #2:  
   <input type="text" id="address2" name="address2"><br> Phone Number:  
   <input type="text" id="phone" name="phone"><br> E-Mail:  
   <input type="text" id="email" name="email"><br>  
   <input type="submit" id="btnSub" name="btnSub" value="Submit"><br>  
   </form> 
  </body> 
  </html>


ADD를 처리하기 위해 이 HTML 양식을 설정했습니다. ASP. 여기 ASP 페이지에는 XML 파일과 ROLODEX.XML이 존재하는지 감지하는 기능이 있습니다. 파일이 있으면 ASP는 파일에 새 항목을 추가하고, 파일이 없으면 파일을 만들어야 합니다.

프로세스 Add.asp:

<% 
   &#39;-------------------------------------------------------------------- 
   &#39;The "addNewContacttoXML" Function accepts two parameters. 
   &#39;strXMLFilePath - The physical path where the XML file will be saved. 
   &#39;strFileName - The name of the XML file that will be saved. 
   &#39;-------------------------------------------------------------------- 
   Function addNewContacttoXML(strXMLFilePath, strFileName)  
    &#39;Declare local variables.  
    Dim objDom  
    Dim objRoot  
    Dim objRecord  
    Dim objField 
    Dim objFieldValue  
    Dim objattID  
    Dim objattTabOrder  
    Dim objPI  
    Dim blnFileExists  
    Dim x  
    &#39;Instantiate the Microsoft XMLDOM.  
    Set objDom = server.CreateObject("Microsoft.XMLDOM")  
    objDom.preserveWhiteSpace = True 
    &#39;Call the Load Method of the XMLDOM Object. The Load ethod has a  
    &#39;boolean return value indicating whether or not the file could be  
    &#39;loaded. If the file exists and loads it will return true, otherwise, 
    &#39;it will return false. 
    blnFileExists = objDom.Load(strXMLFilePath & "\" & strFileName)  
    &#39;Test to see if the file loaded successfully.  
    If blnFileExists = True Then  
     &#39;If the file loaded set the objRoot Object equal to the root element  
     &#39;of the XML document.  
     Set objRoot = objDom.documentElement Else  
     &#39;Create your root element and append it to the XML document.  
     Set objRoot = objDom.createElement("rolodex")  
     objDom.appendChild objRoot 
    End If  
     &#39;Create the new container element for the new record.  
     Set objRecord = objDom.createElement("contact")  
     objRoot.appendChild objRecord  
     &#39;Iterate through the Form Collection of the Request Object. 
     For x = 1 To Request.Form.Count  
      &#39;Check to see if "btn" is in the name of the form element. If it is,  
      &#39;then it is a button and we do not want to add it to the XML  
      &#39;document".  
      If instr(1,Request.Form.Key(x),"btn") = 0 Then  
       &#39;Create an element, "field".  
       Set objField = objDom.createElement("field")  
       &#39;Create an attribute, "id".  
       Set objattID = objDom.createAttribute("id")  
       &#39;Set the value of the id attribute equal the the name of the current  
       &#39;form field.  
       objattID.Text = Request.Form.Key(x)  
       &#39;The setAttributeNode method will append the id attribute to the  
       &#39;field element. objField.setAttributeNode objattID  
       &#39;Create another attribute, "taborder". This just orders the  
       &#39;elements.  
       Set objattTabOrder = objDom.createAttribute("taborder")  
        
       &#39;Set the value of the taborder attribute.  
       objattTabOrder.Text = x  
       &#39;Append the taborder attribute to the field element.  
       &#39;objField.setAttributeNode objattTabOrder  
       &#39;Create a new element, "field_value". 
       Set objFieldValue = objDom.createElement("field_value")  
       &#39;Set the value of the field_value element equal to the value of the  
       &#39;current field in the Form Collection.  
       objFieldValue.Text = Request.Form(x)  
       &#39;Append the field element as a child of the new record container  
       &#39;element, contact. objRecord.appendChild objField  
       &#39;Append the field_value element as a child of the field element. 
       objField.appendChild objFieldValue  
      End If  
     Next  
     &#39;Check once again to see if the file loaded successfully. If it did  
     &#39;not, that means we are creating a new document and need to be sure to  
     &#39;insert the XML processing instruction.  
     If blnFileExists = False then  
      &#39;Create the xml processing instruction.  
      Set objPI = objDom.createProcessingInstruction("xml", "version=&#39;1.0&#39;")  
      &#39;Append the processing instruction to the XML document.  
      objDom.insertBefore objPI, objDom.childNodes(0)  
     End If  
     &#39;Save the XML document. 
     objDom.save strXMLFilePath & "\" & strFileName  
     &#39;Release all of your object references.  
     Set objDom = Nothing  
     Set objRoot = Nothing  
     Set objRecord = Nothing  
     Set objField = Nothing  
     Set objFieldValue = Nothing  
     Set objattID = Nothing  
     Set objattTabOrder = Nothing  
     Set objPI = NothingEnd  
    Function 
    &#39;Do not break on an error. 
    On Error Resume Next 
    &#39;Call the addNewContacttoXML function, passing in the physical path to 
    &#39;save the file to and the name that you wish to use for the file. 
    addNewContacttoXML "c:","rolodex.xml" 
    &#39;Test to see if an error occurred, if so, let the user know. 
    &#39;Otherwise, tell the user that the operation was successful. 
    If err.number <> 0 then  
     Response.write("Errors occurred while saving your form submission.") 
    Else  
     Response.write("Your form submission has been saved.") 
    End If 
   %>


"HTML 양식 데이터를 XML 형식으로 저장"에 대한 기사를 읽었다면 HTML 데이터 확장에 추가되는 것을 알 수 있습니다. XML 파일에 대한 코드는 기본적으로 HTML 데이터를 새 문서로 확장하는 코드와 동일합니다. 그러나 여기에는 두 가지 주요 차이점이 있습니다.

 &#39;Call the Load Method of the XMLDOM Object. The Load Method has a  
   &#39;boolean return value indicating whether or not the file could be  
   &#39;loaded. If the file exists and loads it will return true, otherwise,  
   &#39;it will return false.  
   blnFileExists = objDom.Load(strXMLFilePath & "\" & strFileName)  
    
   &#39;Test to see if the file loaded successfully.  
   If blnFileExists = True Then  
    &#39;If the file loaded set the objRoot Object equal to the root element  
    &#39;of the XML document.  
    Set objRoot = objDom.documentElement 
   Else  
    &#39;Create your root element and append it to the XML document.  
    Set objRoot = objDom.createElement("contact")  
    objDom.appendChild objRoot  
   End If

이 섹션의 코드는 addNewContacttoXML 함수에서 가져온 것입니다. 매번 새 파일을 만들 수 없기 때문에 대신 CONTACT를 저장합니다. 파일을 로드할 수 있으면 XML 문서의 루트 요소를 가져옵니다. 그렇지 않으면 해당 요소가 존재하지 않는다고 가정하고 새 요소를 만들어 XML 문서에 추가합니다.

또 다른 주요 차이점은 LOAD가 성공했는지 확인하기 위해 파일에 대한 2차 검사를 수행할 때 처리 명령을 추가해야 하는지 여부를 결정할 수 있다는 것입니다. 파일이 존재하는 경우 이 지시어를 추가할 필요가 없습니다. 단, 새로운 파일이 생성되는 경우에는 이 처리 명령을 추가해야 합니다.


&#39;Check once again to see if the file loaded successfully. If it did  
  &#39;not, that means we are creating a new document and need to be sure to  
  &#39;insert the XML processing instruction.  
  If blnFileExists = False then  
   &#39;Create the xml processing instruction.  
   Set objPI = objDom.createProcessingInstruction("xml", "version=&#39;1.0&#39;")  
   &#39;Append the processing instruction to the XML document.  
   objDom.insertBefore objPI, objDom.childNodes(0)  
  End If

위의 두 가지 차이점 외에도 새 파일에 데이터를 저장하는 코드는 실제로 새 레코드를 추가하는 코드와 동일하다는 것을 알 수 있습니다. 기존 파일. 새로 추가된 각 RECORD를 수용하기 위해 CONTAINER라는 새 요소를 만듭니다. 코드는 요청 개체의 양식 컬렉션에서 반복되어 적절한 XML 노드를 생성하고 노드 값을 현재 양식 필드와 동일하게 설정합니다.

위는 XML 문서에 새로운 "기록"을 추가하는 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.