我正在尝试使用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,但在理解语法如何工作时遇到了问题。
答案 0 :(得分:2)
很难用不正确的代码对需求进行反向工程,但是我怀疑
"/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;否则,结果为true。因此,表达式的最终结果是布尔值,而不是节点集。
语法错误是因为XPath相等运算符是“ =”,而不是“ ==”。