XML Tutorial

XML หน้าแรก บทนำ XML XML วิธีใช้งาน XML Tree ไวยากรณ์ XML องค์ประกอบ XML คุณสมบัติ XML XML เนมสเปซ จอแสดงผล XML XML HttpRequest XML Parser XML DOM XML XPath XML XSLT XML XQuery XML XLink เครื่องมือตรวจสอบ XML XML DTD XML Schema XML Server ตัวอย่าง XML แบบทดสอบ XML ใบรับรอง XML

XML AJAX

บทนำ AJAX AJAX XMLHttp คำขอ AJAX การตอบสนอง AJAX ไฟล์ AJAX XML AJAX PHP AJAX ASP ฐานข้อมูล AJAX แอปพลิเคชัน AJAX ตัวอย่าง AJAX

XML DOM

บทนำ DOM โหนด DOM การเข้าถึง DOM ข้อมูลโหนด DOM รายการโหนด DOM DOM Traversing การนำทาง DOM DOM รับค่า DOM เปลี่ยนโหนด DOM ลบโหนด DOM แทนที่โหนด DOM สร้างโหนด DOM เพิ่มโหนด DOM โคลนโหนด ตัวอย่าง DOM

บทช่วย สอนXPath

บทนำ XPath โหนด XPath ไวยากรณ์ XPath แกน XPath ตัวดำเนินการ XPath ตัวอย่าง XPath

กวดวิชาXSLT

บทนำ XSLT ภาษา XSL การแปลง XSLT XSLT <แม่แบบ> XSLT <ค่าของ> XSLT <for-each> XSLT <sort> XSLT <if> XSLT <เลือก> ใช้ XSLT XSLT บนไคลเอนต์ XSLT บนเซิร์ฟเวอร์ XSLT แก้ไข XML ตัวอย่าง XSLT

กวดวิชาXQuery

บทนำ XQuery ตัวอย่าง XQuery XQuery FLWOR XQuery HTML ข้อกำหนด XQuery ไวยากรณ์ XQuery XQuery เพิ่ม XQuery Select ฟังก์ชัน XQuery

XML DTD

บทนำ DTD บล็อกตัวต่อ DTD องค์ประกอบ DTD คุณสมบัติ DTD องค์ประกอบ DTD เทียบกับ Attr หน่วยงาน DTD ตัวอย่าง DTD

ส คีมา XSD

บทนำ XSD XSD วิธีการ XSD <schema> องค์ประกอบ XSD แอตทริบิวต์ XSD ข้อจำกัด XSD

XSD Complex

องค์ประกอบ XSD XSD ว่างเปล่า องค์ประกอบ XSD เท่านั้น XSD Text เท่านั้น XSD ผสม ตัวชี้วัด XSD XSD <ใด ๆ> XSD <anyAttribute> การทดแทน XSD XSD ตัวอย่าง

ข้อมูลXSD

XSD สตริง วันที่ XSD XSD ตัวเลข XSD เบ็ดเตล็ด ข้อมูลอ้างอิง XSD

บริการเว็บ

XML Services XML WSDL XML SOAP XML RDF XML RSS

อ้างอิง

ประเภทโหนด DOM โหนด DOM DOM NodeList DOM NamedNodeMap เอกสาร DOM องค์ประกอบ DOM แอตทริบิวต์ DOM ข้อความ DOM DOM CDATA ความคิดเห็นของ DOM DOM XMLHttpRequest DOM Parser องค์ประกอบ XSLT ฟังก์ชัน XSLT/XPath

XSLT - การแก้ไข XML


ข้อมูลที่จัดเก็บในไฟล์ XML สามารถแก้ไขได้จากอินเทอร์เน็ตเบราว์เซอร์


เปิด แก้ไข และบันทึก XML

ตอนนี้ เราจะแสดงวิธีการเปิด แก้ไข และบันทึกไฟล์ XML ที่จัดเก็บไว้ในเซิร์ฟเวอร์

เราจะใช้ XSL เพื่อแปลงเอกสาร XML เป็นแบบฟอร์ม HTML ค่าขององค์ประกอบ XML จะถูกเขียนลงในฟิลด์อินพุต HTML ในรูปแบบ HTML แบบฟอร์ม HTML สามารถแก้ไขได้ หลังจากแก้ไขข้อมูลแล้ว ข้อมูลจะถูกส่งกลับไปยังเซิร์ฟเวอร์และไฟล์ XML จะได้รับการอัปเดต (เราจะแสดงโค้ดสำหรับทั้ง PHP และ ASP)


ไฟล์ XML และไฟล์ XSL

ขั้นแรก ให้ดูที่เอกสาร XML ("tool.xml"):

<?xml version="1.0" encoding="UTF-8"?>
<tool>
  <field id="prodName">
    <value>HAMMER HG2606</value>
  </field>
  <field id="prodNo">
    <value>32456240</value>
  </field>
  <field id="price">
    <value>$30.00</value>
  </field>
</tool>

ดูไฟล์ XML

จากนั้น ให้ดูที่สไตล์ชีตต่อไปนี้ ("tool.xsl"):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <form method="post" action="edittool.asp">
  <h2>Tool Information (edit):</h2>
  <table border="0">
    <xsl:for-each select="tool/field">
    <tr>
      <td><xsl:value-of select="@id"/></td>
      <td>
      <input type="text">
      <xsl:attribute name="id">
        <xsl:value-of select="@id" />
      </xsl:attribute>
      <xsl:attribute name="name">
        <xsl:value-of select="@id" />
      </xsl:attribute>
      <xsl:attribute name="value">
        <xsl:value-of select="value" />
      </xsl:attribute>
      </input>
      </td>
    </tr>
    </xsl:for-each>
  </table>
  <br />
  <input type="submit" id="btn_sub" name="btn_sub" value="Submit" />
  <input type="reset" id="btn_res" name="btn_res" value="Reset" />
  </form>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

ดูไฟล์ XSL

ไฟล์ XSL ด้านบนจะวนซ้ำองค์ประกอบในไฟล์ XML และสร้างช่องป้อนข้อมูลหนึ่งช่องสำหรับองค์ประกอบ "ช่อง" ของ XML แต่ละองค์ประกอบ ค่าของแอตทริบิวต์ "id" ขององค์ประกอบ XML "ฟิลด์" จะถูกเพิ่มไปยังทั้งแอตทริบิวต์ "id" และ "name" ของฟิลด์อินพุต HTML แต่ละฟิลด์ ค่าขององค์ประกอบ XML "value" แต่ละรายการจะถูกเพิ่มลงในแอตทริบิวต์ "value" ของช่องป้อนข้อมูล HTML แต่ละช่อง ผลลัพธ์คือรูปแบบ HTML ที่แก้ไขได้ซึ่งมีค่าจากไฟล์ XML

จากนั้น เรามีสไตล์ชีตที่สอง: "tool_updated.xsl" นี่คือไฟล์ XSL ที่จะใช้เพื่อแสดงข้อมูล XML ที่อัปเดต สไตล์ชีตนี้จะไม่ส่งผลให้เกิดรูปแบบ HTML ที่แก้ไขได้ แต่เป็นตาราง HTML แบบคงที่:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <h2>Updated Tool Information:</h2>
  <table border="1">
    <xsl:for-each select="tool/field">
    <tr>
      <td><xsl:value-of select="@id" /></td>
      <td><xsl:value-of select="value" /></td>
    </tr>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

ดูไฟล์ XSL



ไฟล์ PHP

ในไฟล์ "tool.xsl" ด้านบน ให้เปลี่ยนแอตทริบิวต์ action ของแบบฟอร์ม HTML เป็น "edittool.php"

หน้า "edittool.php" ประกอบด้วยสองฟังก์ชัน: ฟังก์ชัน loadFile() จะโหลดและแปลงไฟล์ XML สำหรับแสดงผล และฟังก์ชัน updateFile() จะนำการเปลี่ยนแปลงไปใช้กับไฟล์ XML:

<?php
function loadFile($xml, $xsl)
{
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

$xslDoc = new DOMDocument();
$xslDoc->load($xsl);

$proc = new XSLTProcessor();
$proc->importStyleSheet($xslDoc);
echo $proc->transformToXML($xmlDoc);
}

function updateFile($xml)
{
$xmlLoad = simplexml_load_file($xml);
$postKeys = array_keys($_POST);

foreach($xmlLoad->children() as $x)
{
  foreach($_POST as $key=>$value)
  {
    if($key == $x->attributes())
    {
      $x->value = $value;
    }
  }
}

$xmlLoad->asXML($xml);
loadFile($xml,"tool_updated.xsl");
}

if($_POST["btn_sub"] == "")
{
  loadFile("tool.xml", "tool.xsl");
}
else
{
  updateFile("tool.xml");
}
?>

เคล็ดลับ:หากคุณไม่ทราบวิธีเขียน PHP โปรดศึกษา บทช่วย สอน PHPของ เรา

หมายเหตุ:เรากำลังดำเนินการแปลงและนำการเปลี่ยนแปลงไปใช้กับไฟล์ XML บนเซิร์ฟเวอร์ นี่เป็นโซลูชันข้ามเบราว์เซอร์ ลูกค้าจะได้รับ HTML กลับมาจากเซิร์ฟเวอร์เท่านั้น ซึ่งจะทำงานในเบราว์เซอร์ใดก็ได้


ไฟล์ ASP

รูปแบบ HTML ในไฟล์ "tool.xsl" ด้านบนมีแอ็ตทริบิวต์ action ที่มีค่า "edittool.asp"

หน้า "edittool.asp" ประกอบด้วยสองฟังก์ชัน: ฟังก์ชัน loadFile() โหลดและแปลงไฟล์ XML สำหรับการแสดงผล และฟังก์ชัน updateFile() จะนำการเปลี่ยนแปลงไปใช้กับไฟล์ XML:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
'Load XML and XSL file
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
'Transform file
Response.Write(xmlDoc.transformNode(xslDoc))
end function

function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
'Load XML file
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)

'Set the rootEl variable equal to the root element
Set rootEl = xmlDoc.documentElement

'Loop through the form collection
for i = 1 To Request.Form.Count
  'Eliminate button elements in the form
  if instr(1,Request.Form.Key(i),"btn_")=0 then
    'The selectSingleNode method queries the XML file for a single node
    'that matches a query. This query requests the value element that is
    'the child of a field element that has an id attribute which matches
    'the current key value in the Form Collection. When there is a match -
    'set the text property equal to the value of the current field in the
    'Form Collection.
    set f = rootEl.selectSingleNode("field[@id='" & _
    Request.Form.Key(i) & "']/value")
    f.Text = Request.Form(i)
  end if
next

'Save the modified XML file
xmlDoc.save xmlfile

'Release all object references
set xmlDoc=nothing
set rootEl=nothing
set f=nothing

'Load the modified XML file with a style sheet that
'allows the client to see the edited information
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function

'If form is submitted, update the XML file and display result
' - if not, transform the XML file for editing
if Request.Form("btn_sub")="" then
  loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")
else
  updateFile server.MapPath("tool.xml")
end if
%>