簡體   English   中英

在web頁面編輯XML文件,使用PHP存回XML文件

[英]Edit XML file on web page and save back to XML file using PHP

我有一個包含事件列表的 XML 文件,需要通過 web 頁面對其進行編輯,提交編輯后的數據后,需要將其保存回 XML 文件。

我已經使用 XSL 文件在 web 頁面上顯示 XML。 對於每個節點,它顯示一個空輸入框,右側顯示節點值。 如何讓節點值出現在輸入文本框內? 以及如何讓節點名稱出現在輸入文本框的左側?

下一個問題是,一旦它被編輯,我如何才能將它以完全相同的結構存儲回 XML 文件中?

還有一件事,我如何添加或刪除事件? 謝謝。

這是 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<events>
    <event>
        <id>ev01</id>
        <date>31/12/2020</date>
        <start-time>09:00</start-time>
        <end-time>12:00</end-time>
        <title>Event #1</title>
        <cost>20</cost>
        <venue>London</venue>
        <available-places>10</available-places>
        <updates><![CDATA[We'll post updates here]]></updates>
    </event>
    <event>
        <id>ev02</id>
        <date>31/12/2020</date>
        <start-time>13:00</start-time>
        <end-time>17:00</end-time>
        <title>Event #2</title>
        <cost>20</cost>
        <venue>London</venue>
        <available-places>Sold out</available-places>
        <updates><![CDATA[We'll post updates here]]></updates>
    </event>
</events>

這是 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="/events">
  <div id="edit_xml">
  <h2>My events</h2>
  <form method="post" action="#edit_xml">
    <xsl:for-each select="event/*">
      <p>
      <input type="text" id="" name="" value="">
      <xsl:value-of select="." />
      </input>
      </p>
    </xsl:for-each>
    <p><input type="submit" name="submit_data" value="Submit"/></p>
  </form>
  </div>
</xsl:template>

</xsl:stylesheet>

要回答您的 XSLT 問題以呈現 HTML 表單:

如何讓節點值出現在輸入文本框內? 以及如何讓節點名稱出現在輸入文本框的左側? ... 還有一件事,我如何添加或刪除事件?

考慮調整 XSLT 以使用name()並使用表達式賦值: {text()} 甚至用 alignment 的樣式將節點名稱包裝在<label>標簽內。此外,使用 XSLT 函數添加唯一的<input> id (用於 CSS/Javascript 識別)和name (用於 PHP 識別): name()position() 為了更好地管理每個事件,將腳本分成eventevents模板

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>
    
    <xsl:template match="/events">
        <div id="edit_xml">
          <h2>My events</h2>
             <form method="post" action="#edit_xml">
                 <xsl:apply-templates select="event"/>
                 <p><input type="submit" name="submit_data" value="Submit"/></p>
             </form>
        </div>
    </xsl:template>
    
    <xsl:template match="event">
        <xsl:for-each select="*">
          <p>
              <label style="display: inline-block;width: 140px;">
                  <xsl:value-of select="name()"/>
              </label>
              <input type="text" id="{concat(name(), position())}" 
                     name="{concat(name(), position())}" 
                     value="{text()}"/>
          </p>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

在線演示

HTML 輸出

要刪除元素,請在頂層events模板中的<xsl:apply-templates>中運行括號[]條件:

<!-- SELECT ONLY FIRST event TO BE APPLIED -->
<xsl:apply-templates select="event[1]"/>

<!-- SELECT ONLY SECOND event TO BE APPLIED -->
<xsl:apply-templates select="event[2]"/>

<!-- SELECT ALL NODES AFTER FIRST event -->
<xsl:apply-templates select="event[position() &gt; 1]"/>

<!-- SELECT ALL NODES BUT EXCLUDE SECOND NODE -->
<xsl:apply-templates select="event[position() != 2]"/>

<!-- SELECT ONLY LAST event TO BE APPLIED -->
<xsl:apply-templates select="event[last()]"/>

對於這個非 XSLT 問題:

下一個問題是,一旦它被編輯,我如何才能將它以完全相同的結構存儲回 XML 文件中?

您需要像 PHP 那樣使用應用層處理表單提交,以接收輸入值並綁定到 XML 文檔中。 事實上,您可以設置另一個具有完全原始布局的 XSLT 解決方案來接收來自 PHP 的參數!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM