Удалить элементы XML на основе ввода пользователя

Я хотел бы удалить запись XML на основе ввода пользователя.

Пример XML:

<YealinkIPPhoneDirectory>
<DirectoryEntry>
<Name>Test321</Name>
<Telephone>101</Telephone>
<Telephone>102</Telephone>
<Telephone>103</Telephone>
</DirectoryEntry>
<DirectoryEntry>
<Name>Test456</Name>
<Telephone>107</Telephone>
<Telephone>108</Telephone>
<Telephone>109</Telephone>
</DirectoryEntry>
<DirectoryEntry>
<Name>Test789</Name>
<Telephone>000</Telephone>
<Telephone>111</Telephone>
<Telephone>222</Telephone>
</DirectoryEntry>
</YealinkIPPhoneDirectory>

Поэтому удалите записи DirectoryEntry до конца DirectoryEntry. Запись работает нормально и отправляет данные в правильном формате:

<?php
if (isset($_REQUEST['ok'])) {
$xml = new DOMDocument("1.0","UTF-8");
$xml->load("emergency.xml");
$rootTag = $xml->getElementsByTagName("YealinkIPPhoneDirectory")->item(0);
$dataTag = $xml->createElement("DirectoryEntry");
$aTag = $xml->createElement("Name",$_REQUEST['a']);
$bTag = $xml->createElement("Telephone",$_REQUEST['b']);
$cTag = $xml->createElement("Telephone",$_REQUEST['c']);
$dTag = $xml->createElement("Telephone",$_REQUEST['d']);
$dataTag->appendChild($aTag);
$dataTag->appendChild($bTag);
$dataTag->appendChild($cTag);
$dataTag->appendChild($dTag);
$rootTag->appendChild($dataTag);
$xml->save("emergency.xml");
}
?>
<form class="form-horizontal" action="emergencycontacts.php" method="post">
<form class="form-horizontal" action="emergencycontacts.php" method="post">
<fieldset>

<!-- Form Name -->
<legend> </legend>

<!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label">Full Name</label>
<div class="col-md-5">
<input class="form-control input-md" required="" type="text" name="a" />
<span class="help-block">Required</span>
</div>
</div><!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label">Extension</label>
<div class="col-md-2">
<input class="form-control input-md" value=" " type="text" name="b" />
<span class="help-block">Internal</span>
</div>
</div>

<!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label">Direct Phone Line</label>
<div class="col-md-4">
<input class="form-control input-md" value=" " type="text" name="c" />
<span class="help-block">External</span>
</div>
</div>

<!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label">Cellular Phone</label>
<div class="col-md-4">
<input class="form-control input-md" value=" " type="text" name="d" />
<span class="help-block">External</span>
</div>
</div>

<!-- Button (Double) -->
<div class="form-group">
<label class="col-md-4 control-label" for="button1id"></label>
<div class="col-md-8">
<input class="btn btn-primary" input type="submit" name="ok" value="Submit Entry" ></div>
</div>

</fieldset>
</form>

Когда я разместил вторую форму ниже и попытался удалить узел с помощью foreach, я не нашел результатов, добавленных или удаленных. Форма остается в такте, как это было:

                <p>Please fill in the below form to REMOVE a contact to the phone system.</p>

<?php
if (isset($_REQUEST['ok2'])) {
$xml = new DOMDocument("1.0","UTF-8");
$xml->load("emergency.xml");
$aTag = $_POST['a'];
$xpath = new DOMXPATH($xml);
foreach($xpath->query("/YealinkIPPhone/DirectoryEntry[a = '$aTag']") as $node)
{
$node->parentNode->removeChild($node);
}
$xml->formatoutput = true;
$xml->save("emergency.xml");
}
?>
<form class="form-horizontal" action="emergencycontacts.php" method="post">
<form class="form-horizontal" action="emergencycontacts.php" method="post">
<fieldset>

<!-- Form Name -->
<legend> </legend>

<!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label">Full Name</label>
<div class="col-md-5">
<input class="form-control input-md" required="" type="text" name="a" />
<span class="help-block">Required</span>
</div>
</div>

<!-- Button (Double) -->
<div class="form-group">
<label class="col-md-4 control-label" for="button1id"></label>
<div class="col-md-8">
<input class="btn btn-primary" input type="submit" name="ok2" value="Delete Entry" >

Я искал по всему и не нашел много на удаление данных, основанных на записи UER. Есть ли лучший способ удалить элементы? Я не вижу, чего мне не хватает.

1

Решение

Следующий запрос XPath не соответствует структуре XML:

/YealinkIPPhone/DirectoryEntry[a = '$aTag']

А именно, корневой элемент XML с именем YealinkIPPhoneDirectoryне YealinkIPPhone, И дитя DirectoryEntry Элемент, значение которого необходимо оценить Name не a :

foreach($xpath->query("/YealinkIPPhoneDirectory/DirectoryEntry[Name = '$aTag']") as $node)
{
$node->parentNode->removeChild($node);
}

eval.in demo

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]