XSLT或PHP超链接删除元素


XSLT or PHP hyperlink delete element

我的XML文件的一个片段:

<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文件的片段:

<xsl:for-each select="info">
<tr>
    <td><xsl:value-of select="title" /></td>
    <td><xsl:value-of select="blah" /></td>
    <td><xsl:value-of select="derp" /></td>
</tr>
</xsl:for-each>

当我在PHP中使用XSLTProcessor时,这基本上显示了info元素的title, blah和derp在它们自己的行中,在一个整洁的表中。

但无论如何,我要做的是有一个X按钮在我的表中的每一行元素。当单击X按钮时,将从XML文件中删除整个相应的<info>元素。问题是我不知道从哪里开始做这件事。我不知道是否可以使用XSL在XML文件中重写,或者我必须在PHP中完成。

谢谢你的帮助

如何在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();
结果如下(在线演示):
<?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>

我希望这是有用的。

我最近也在写关于编号谓词的文章,在的回答中选择仅一个节点并移动到php