猿问

如何用xpath获取所有节点并作为resposeXML返回给js?

如何使用 xpath 检索 xml 并将其作为 responseXML 发送回客户端 js?


我有php作为服务器,js作为客户端,需要指定的数据并显示为html表格。


这是我的 xml


// goods.xml

<items>

  <item>

    <id>1</id>

    <itemname>Apple iPhone X</itemname>

    <itemqty>20</itemqty>

  </item>

  <item>

    <id>2</id>

    <itemname>Apple iPhone 7</itemname>

    <itemqty>20</itemqty>

  </item>

  <item>

    <id>3</id>

    <itemname>Apple iPhone 8</itemname>

    <itemqty>2</itemqty>

  </item>

</items>

我想要那些数量超过 10 件的物品,我的 php 文件只能得到其中一件


// handle.php

$xmlFile = "../../data/goods.xml";

$doc->load($xmlFile);

$xpath = new DOMXPath($doc);

$xml = new SimpleXMLElement($xmlFile, NULL, TRUE);

$nodes = $xml->xpath("/items/item[itemqty>10]");

echo $doc->saveXML($xpathresultset->item(0)); // send the xml response back to the client

然后我只得到第一个结果,我无法得到两个结果(id 1 & id 2)


<item>

   <id>1</id>

   <itemname>Apple iPhone X</itemname>

   <itemqty>20</itemqty>

</item>

但我想要


  <item>

    <id>1</id>

    <itemname>Apple iPhone X</itemname>

    <itemqty>20</itemqty>

  </item>

  <item>

    <id>2</id>

    <itemname>Apple iPhone 7</itemname>

    <itemqty>20</itemqty>

  </item>

任何帮助,将不胜感激!!


米脂
浏览 88回答 1
1回答

狐的传说

DOMDocument使用than可能更容易完成此操作SimpleXML,因为您可以使用xpath来搜索节点itemqty <= 10并将其从文档中删除:$xml = '<items>&nbsp; <item>&nbsp; &nbsp; <id>1</id>&nbsp; &nbsp; <itemname>Apple iPhone X</itemname>&nbsp; &nbsp; <itemqty>20</itemqty>&nbsp; </item>&nbsp; <item>&nbsp; &nbsp; <id>2</id>&nbsp; &nbsp; <itemname>Apple iPhone 7</itemname>&nbsp; &nbsp; <itemqty>20</itemqty>&nbsp; </item>&nbsp; <item>&nbsp; &nbsp; <id>3</id>&nbsp; &nbsp; <itemname>Apple iPhone 8</itemname>&nbsp; &nbsp; <itemqty>2</itemqty>&nbsp; </item></items>';$doc = new DOMDocument();$doc->loadXML($xml);$xpath = new DOMXPath($doc);foreach ($xpath->query('/items/item[itemqty<=10]') as $node) {&nbsp; &nbsp; $node->parentNode->removeChild($node);}echo $doc->C14N();输出:<items>&nbsp; <item>&nbsp; &nbsp; <id>1</id>&nbsp; &nbsp; <itemname>Apple iPhone X</itemname>&nbsp; &nbsp; <itemqty>20</itemqty>&nbsp; </item>&nbsp; <item>&nbsp; &nbsp; <id>2</id>&nbsp; &nbsp; <itemname>Apple iPhone 7</itemname>&nbsp; &nbsp; <itemqty>20</itemqty>&nbsp; </item></items>
随时随地看视频慕课网APP
我要回答