2013-01-02 31 views
1

我的XML文件中的一個片段:XSLT或者PHP超級鏈接刪除元素

<list> 
    <info> 
    <title>My Title</title> 
    <blah>My Blah</blah> 
    <derp>My Derp</derp> 
    </info> 
    <info> 
    <title>Second Title</title> 
    <blah>My Blah2</blah> 
    <derp>My 2nd Derp</derp> 
    </info> 
    <info> 
    <title>123</title> 
    <blah>444</blah> 
    <derp>zzz</derp> 
    </info> 
</list> 

摘錄我的XSLT文件當我在PHP中使用XSLTProcessor時,在他們自己的一排整潔的表格中。

但無論如何,我想要做的是在我的表格中的每行元素中都有一個X按鈕。當這個按鈕被點擊時,整個對應的<info>元素將從XML文件中刪除。問題是我不知道從哪裏開始做這件事。我不知道是否可以使用XSL重寫XML文件,還是必須使用PHP來完成。

感謝您的幫助。

+0

''輸出信息元素的編號如1,2或3嗎? – hakre

+0

是的。它可能會倒退,因爲我在我的XSL中也有''以保留順序顯示錶。因此,123,444,zzz將位於頂部而不是底部。 – Sosa

+1

將該號碼與鏈接一起存儲。單擊時,可以通過xpath選擇要刪除的元素:例如'info [2]'。這會解決你的問題嗎? – hakre

回答

0

如何按位置刪除XML文檔中的元素。

正如您所寫,您可以使用Xpath表達式來查詢要刪除的元素並將其刪除。

以下是一個快速的PHP示例,它有點擴展,因爲它也會刪除元素之後的文本(在文檔中爲空白)作爲獎勵。這再次說明了如何使用位置斷言:

$doc = new DOMDocument(); 
$doc->loadXML($xml); 
$xp = new DOMXPath($doc); 

$expression = ' 

    /list/info[2] | /list/info[2]/following-sibling::text()[1] 
                    '; 
// the element,   the whitespace after the element, 
// numbered    again numbered. just to clean up a bit 
//       and to give another example 

$delete = $xp->query($expression); 
foreach($delete as $element) { 
    $element->parentNode->removeChild($element); 
} 

echo $doc->saveXML(); 

然後結果看起來像(Online Demo):

<?xml version="1.0"?> 
<list> 
    <info> 
    <title>My Title</title> 
    <blah>My Blah</blah> 
    <derp>My Derp</derp> 
    </info> 
    <info> 
    <title>123</title> 
    <blah>444</blah> 
    <derp>zzz</derp> 
    </info> 
</list> 

我希望這是有幫助的。

我最近在寫關於編號謂詞以及answer to select only one node and move on php。也許它會散發出更多的光芒。