我有一个填充'producer'的XML文件。
以下是文件的示例:
<producer>
<name>John Doe's Fish Emporium!</name>
<owner>John Doe</owner>
<address>
<civic>123</civic>
<mailing>Example Drive</mailing>
<town>Halifax</town>
<province>Nova Scotia</province>
<postal>A1B 2C3</postal>
<phone>902-123-4567</phone>
<fax>902-098-7654</fax>
<email>john@example.com</email>
<website>www.example.com</website>
</address>
<products>
<product>Pollock (Saithe)</product>
<product>Flounder/Sole</product>
<product>Salmon, Farm Raised</product>
<product>Mussels, Blue</product>
</products>
<exports>
<region>Europe</region>
<region>North America</region>
<region>Pacific Rim</region>
<region>United States</region>
</exports>
</producer>
用户将在html表单中输入一个值,该表单将在XML文档中搜索该关键字,然后打印出整个生产者。因此,例如,如果用户搜索产品Salmon,搜索将吐出上面的整个生产者。如何检测我在XML文档中的位置,然后回显整个生产者?
谢谢!
答案 0 :(得分:2)
我假设你的生产者元素是生产者根节点的直接子节点。如果没有,请相应调整:
/producers/producer[descendant::*[contains(text(), "Salmon")]]
这将找到在其任何子文本节点中具有文本Salmon的所有生成器元素。此XPath允许您搜索所有子节点,例如地区,城镇,产品等 - 无论水平如何。
有关样板代码,请参阅Implementing condition in XPath。
答案 1 :(得分:0)
答案 2 :(得分:0)
这可能有用: -
$obj = simplexml_load_string(...);
$expr = "/producer/products/product[contains(text(),'salmon')]/../..";
$found = $obj->xpath($expr);
享受,玩得开心!