是否可以通过某个标记值找到整个 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>
我有以下 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>