我的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元素的标题,blah和derp。
但无论如何,我想要做的是在我的表格中的每一行元素中都有一个 X 按钮。单击此 X 按钮时,将从XML文件中删除整个相应的<info>
元素。问题是我不知道从哪里开始这样做。我不知道是否可以使用XSL在XML文件中重写,或者我是否必须在PHP中进行重写。
感谢您的帮助。
答案 0 :(得分: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写了关于编号谓词的文章。也许它会有更多的亮点。