この記事で示されている例は、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 は新しいエントリをファイルに追加します。ファイルが存在しない場合は、ファイルを作成する必要があります。
Process Add.asp:
<% '-------------------------------------------------------------------- 'The "addNewContacttoXML" Function accepts two parameters. 'strXMLFilePath - The physical path where the XML file will be saved. 'strFileName - The name of the XML file that will be saved. '-------------------------------------------------------------------- Function addNewContacttoXML(strXMLFilePath, strFileName) 'Declare local variables. Dim objDom Dim objRoot Dim objRecord Dim objField Dim objFieldValue Dim objattID Dim objattTabOrder Dim objPI Dim blnFileExists Dim x 'Instantiate the Microsoft XMLDOM. Set objDom = server.CreateObject("Microsoft.XMLDOM") objDom.preserveWhiteSpace = True 'Call the Load Method of the XMLDOM Object. The Load ethod has a 'boolean return value indicating whether or not the file could be 'loaded. If the file exists and loads it will return true, otherwise, 'it will return false. blnFileExists = objDom.Load(strXMLFilePath & "\" & strFileName) 'Test to see if the file loaded successfully. If blnFileExists = True Then 'If the file loaded set the objRoot Object equal to the root element 'of the XML document. Set objRoot = objDom.documentElement Else 'Create your root element and append it to the XML document. Set objRoot = objDom.createElement("rolodex") objDom.appendChild objRoot End If 'Create the new container element for the new record. Set objRecord = objDom.createElement("contact") objRoot.appendChild objRecord 'Iterate through the Form Collection of the Request Object. For x = 1 To Request.Form.Count 'Check to see if "btn" is in the name of the form element. If it is, 'then it is a button and we do not want to add it to the XML 'document". If instr(1,Request.Form.Key(x),"btn") = 0 Then 'Create an element, "field". Set objField = objDom.createElement("field") 'Create an attribute, "id". Set objattID = objDom.createAttribute("id") 'Set the value of the id attribute equal the the name of the current 'form field. objattID.Text = Request.Form.Key(x) 'The setAttributeNode method will append the id attribute to the 'field element. objField.setAttributeNode objattID 'Create another attribute, "taborder". This just orders the 'elements. Set objattTabOrder = objDom.createAttribute("taborder") 'Set the value of the taborder attribute. objattTabOrder.Text = x 'Append the taborder attribute to the field element. 'objField.setAttributeNode objattTabOrder 'Create a new element, "field_value". Set objFieldValue = objDom.createElement("field_value") 'Set the value of the field_value element equal to the value of the 'current field in the Form Collection. objFieldValue.Text = Request.Form(x) 'Append the field element as a child of the new record container 'element, contact. objRecord.appendChild objField 'Append the field_value element as a child of the field element. objField.appendChild objFieldValue End If Next 'Check once again to see if the file loaded successfully. If it did 'not, that means we are creating a new document and need to be sure to 'insert the XML processing instruction. If blnFileExists = False then 'Create the xml processing instruction. Set objPI = objDom.createProcessingInstruction("xml", "version='1.0'") 'Append the processing instruction to the XML document. objDom.insertBefore objPI, objDom.childNodes(0) End If 'Save the XML document. objDom.save strXMLFilePath & "\" & strFileName '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 'Do not break on an error. On Error Resume Next 'Call the addNewContacttoXML function, passing in the physical path to 'save the file to and the name that you wish to use for the file. addNewContacttoXML "c:","rolodex.xml" 'Test to see if an error occurred, if so, let the user know. '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 データ拡張子と同じであることに気づくでしょう。新しいドキュメントのコードは基本的に同じです。ただし、ここには 2 つの大きな違いがあります:
'Call the Load Method of the XMLDOM Object. The Load Method has a 'boolean return value indicating whether or not the file could be 'loaded. If the file exists and loads it will return true, otherwise, 'it will return false. blnFileExists = objDom.Load(strXMLFilePath & "\" & strFileName) 'Test to see if the file loaded successfully. If blnFileExists = True Then 'If the file loaded set the objRoot Object equal to the root element 'of the XML document. Set objRoot = objDom.documentElement Else '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 ドキュメントに追加します。
もう 1 つの主な違いは、ファイルに対して二次チェックを実行して LOAD が成功したかどうかを確認するときに、処理命令を追加する必要があるかどうかを決定できることです。ファイルが存在する場合、このディレクティブを追加する必要はありません。ただし、新規ファイルを作成する場合には、この処理命令を追加する必要があります。
'Check once again to see if the file loaded successfully. If it did 'not, that means we are creating a new document and need to be sure to 'insert the XML processing instruction. If blnFileExists = False then 'Create the xml processing instruction. Set objPI = objDom.createProcessingInstruction("xml", "version='1.0'") 'Append the processing instruction to the XML document. objDom.insertBefore objPI, objDom.childNodes(0) End If
上記 2 つの違いを除けば、新しいファイルにデータを保存するコードは、既存のファイルに新しいレコードを追加するコードと実際には同じであることがわかります。新しく追加された各 RECORD に対応するために、新しい要素 contact CONTAINER を作成します。コードはリクエスト オブジェクトのフォーム コレクション内で反復されて、適切な XML ノードを作成し、ノード値が現在のフォーム フィールドと同じになるように設定されます。
上記は、XML ドキュメントに新しい「レコード」を追加する内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。