Есть ли способ удалить узел, используя XPATH на основе одного атрибута и значения узла? - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь удалить узел, используя XPATH и php, при поступлении двух запросов XPATH.

Я использую php 5 для такой проблемы. Я безуспешно пытался использовать DOMDocument.

enter code here
//The php file
$xml_str = file_get_contents("projectTest.xml");
$xml = new SimpleXMLElement($xml_str);


echo $xml->saveXML();
unset($xml->xpath("/project/Item/username[@date='2019-04-20'] and 
/project/Item/username/clientID[text()=='10000']")[0]->{0});
echo $xml->saveXML();



//The XML File
<project>   
   <Item>
     <username date="2019-04-20">
      <clientID>10000</clientID>
     </username>
     <name>Test1</name>
     <price>200</price>
     <quantity>1</quantity>
  </Item>
  <Item>
    <username date="2019-06-23">
      <clientID>3</clientID>
    </username>
    <name>Test2</name>
     <price>200</price>
   <quantity>1</quantity>

 </Item>

enter code here

<!-------- Expected:
  <project>
    <Item>
       <username date="2019-06-23">
         <clientID>3</clientID>
       </username>
       <name>Test2</name>
       <price>200</price>
      <quantity>1</quantity>

   </Item>
</project>

Фактические результаты: Приведенный выше код генерирует ошибки. П.С .: Я только начал изучать, как использовать XPATH, у меня возникли проблемы с пониманием того, как работает синтаксис.

1 Ответ

2 голосов
/ 25 апреля 2019

Трудно реконструировать ваши требования из неверного кода, но я подозреваю, что

"/project/Item/username[@date='2019-04-20'] and 
/project/Item/username/clientID[text()=='10000']"

должно быть

"/project/Item/username[@date='2019-04-20' and clientID='10000']"

and - логический оператор, если вы примените егодля двух наборов узлов результат равен true, если оба набора узлов не пусты;следовательно, конечный результат выражения является логическим, а не набором узлов.

Синтаксическая ошибка в том, что оператор равенства XPath равен "=", а не "==".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...