是否可以通过某个标记值找到整个 xml 节点

is it posible to find whole xml node by a certaing tag value

我有以下 xml 个节点。

<offer id="SD00025386">
                <picture>https://isw.b2b-sandi.com.ua/imagecache/full/1/9/19289.jpg</picture>
                <picture>https://isw.b2b-sandi.com.ua/imagecache/full/1/9/19289/19289_1.jpg</picture>
                <name>Трап ANI Plast TA1612 горизонтальний з нержавіючою решіткою 150x150</name>
                <available>true</available>
                <oldCode>19289</oldCode>
                <model>TA1612</model>
                <purchase_price>405.158</purchase_price>
                <currency>UAH</currency>
                <retail_price>691</retail_price>
                <retail_oldprice></retail_oldprice>
                <retail_currency>UAH</retail_currency>
                <outlets>
                    <outlet id="85" name="Харків" instock="1"></outlet>
                    <outlet id="86" name="Київ" instock="3"></outlet>
                    <outlet id="87" name="Україна" instock="16"></outlet>
                </outlets>
                <vendor>Ани Пласт</vendor>
                <vendorCode>SD00025386</vendorCode>
            </offer>

我想搜索供应商具有特定属性的所有节点,例如

<vendor>Qtap</vendor>

并复制到此供应商的另一个 xml 整个报价节点。我可以使用搜索来搜索这个值,但是我必须手动复制 whall 节点。其中大约有 2000 个。例如,是否可以使用 Notepad++ 自动执行此操作,或者使用 PHP 或任何其他语言为此编写脚本将是更好的解决方案。

如果我没理解错的话,你可以这样做,使用 python、lxml 和 xpath,以及 very 的简化版本你的 xml,有两个报价:

from lxml import etree

offers = """<?xml version="1.0" encoding="UTF-8"?>
<offers>
   <offer id="SD00025386">
      <retail_currency>UAH</retail_currency>
      <vendor>Ани Пласт</vendor>
      <vendorCode>SD00025386</vendorCode>
   </offer>
   <offer id="SD11125386">
      <retail_currency>USD</retail_currency>
      <vendor>Qtap</vendor>
      <vendorCode>SD11125386</vendorCode>
   </offer>
</offers>
"""

doc = etree.XML(offers.encode())
target = doc.xpath('//offer[./vendor/text()="Qtap"]')[0]
print(etree.tostring(target).decode())

输出:

<offer id="SD11125386">
      <retail_currency>USD</retail_currency>
      <vendor>Qtap</vendor>
      <vendorCode>SD11125386</vendorCode>
   </offer>