1

私の 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>

XSLTProcessorこれは基本的に、PHPで使用するときに、info 要素のタイトル、何とか、derp をきちんとしたテーブルの独自の行に表示します。

とにかく、私がやろうとしているのは、テーブル内の要素の各行にXボタンを配置することです。このXボタンをクリックすると、対応する<info>要素全体が XML ファイルから削除されます。問題は、これをどこから始めればよいかわかりません。XSL を使用して XML ファイルを書き換えることが可能かどうか、または PHP で行う必要があるかどうかはわかりません。

助けてくれてありがとう。

4

1 に答える 1

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>

これがお役に立てば幸いです。

私は最近、 1つのノードのみを選択して php に移動するという回答で、番号付き述語について書いていました。多分それはもう少し光を放ちます。

于 2013-01-02T13:20:29.890 に答える