2011-12-17 64 views
2

我有以下XML結構:通過指數與jquery刪除XML節點和寫回文件

<?xml version="1.0" encoding="utf-8" ?> 
    <nws> 
     <url>http://cpa.hypotheses.org/feed</url> 
     <url>http://news.ycombinator.com/rss</url> 
     <url>http://rss.slashdot.org/Slashdot/slashdot</url> 
     <url>http://feeds.feedburner.com/hackaday/LgoM</url> 
    </nws> 

...等等。

我想刪除第n個元素。而已。我見過的所有示例都涉及使用xmatch搜索節點內容,而我無法搜索它,因爲1 - 它是一個複雜的字符串,2 - 我真的不知道要刪除的字符串,但我知道索引。

我可以讀這樣的所有URL節點:

$.ajax({ 
type: 'GET', 
url: 'conf.xml', 
dataType: 'xml', 
success: parseXml 
}); 


$(xml).find("url").each(function() { 
    $("#output").append($(this).text()); 
    // $("#output").append(": " + $(this).find("Title").text() + "<br />"); 
}); 

,但我似乎不能說「只輸出第二個」,更不用說將其刪除。

還有一件事。我知道,一旦我操縱XML DOM我有使用

echo $urlFile->asXML('myfile.xml'); 

把它寫回文件,但這個過程是在某種程度上模糊(到什麼類沒有這種「asXML」方法屬於哪一種?它甚至可用這個上下文嗎?我必須加載另一個庫,而不僅僅是jquery.js嗎?) 我迷失在這個過程中的某個地方;有人可以張貼整個過程的概要嗎?即

  1. 讀取文件
  2. 發現,說第二個節點由節點其內容或屬性)的名字
  3. 刪除
  4. 寫回的經修改的表示DOM到文件

(理想情況下,我希望能夠在寫回文件之前做一些檢查,如空行,等等)

即使這個例子不起作用,我只是想圍繞這個概念來包裹我的頭。

回答

0

OK,我解決了PB的一半:我現在就可以使用它的索引,這樣刪除的第n個節點:

$(document).ready(function() { 

    $.ajax({ 
    type: 'GET', 
    url: 'conf.xml', 
    dataType: 'xml', 
    success: parseXml 
    }); 

    function parseXml(xml) { 
    $(xml).find("url").eq(3).remove(); // <= The answer I was looking for 

    $(xml).find("url").each(function(index) { 
     $("#output").append($(this).text()); 
    }); 
    } 
}); 

此輸出我的名單沒有第三個元素。 (但不是作爲DOM對象)。儘管如此,Wohoo!

現在我怎麼才能在一個PHP變量中返回(作爲一個DOM對象)來將其寫回文件?或者使用ajax也許?我可以從ajax中讀取文件,但不能寫入文件,我不知道該怎麼做,任何人都可以做到這一點,這可以讓我指向正確的方向? (保存JS-處理XML到實際文件?)

問候,-PH

+0

OK我放棄了jQuery和製造用SimpleXML(隨叫隨到代碼)的一切;感謝大家 ! – yPhil 2011-12-17 20:49:50

+0

..現在我想弄清楚爲什麼我不能在PHP DOMDocument對象上調用firstChild(所有其他方法似乎都可行,但insertBedore和firstChild都不工作,它們都默默失敗 - (WFT?createElement和appendChild工作)我也想知道在哪裏可以捕獲任何DOM錯誤(我在firebug中看不到任何內容)但是我想你們也不知道這一點。 – yPhil 2011-12-18 18:35:34