属性值以模式开头时获取标签

发布于 2025-02-09 12:14:32 字数 1421 浏览 2 评论 0原文

我正在尝试用ElementTree解析嵌套的XML。

我的XML有: ... .....

       <JOB D="32" APPLICATION="DUDDY"  PARENT_FOLDER="FOLDEXMAPLEL" END_FOLDER="N">
            <VARIABLE NAME="%%YESTER" VALUE="%%$CALCDATE %%$ODATE -2" />
            <VARIABLE NAME="%%Y2020" VALUE="GO" />
            <VARIABLE NAME="%%Y2021" VALUE="G1" />
            <VARIABLE NAME="%%Y2022" VALUE="G2" />
            <VARIABLE NAME="%%M01" VALUE="1" />
            <VARIABLE NAME="%%M02" VALUE="2" />
            <VARIABLE NAME="%%M03" VALUE="3" />
            <VARIABLE NAME="%%M04" VALUE="4" />
            <VARIABLE NAME="%%M05" VALUE="5" />
            <VARIABLE NAME="%%M06" VALUE="6" />
            <VARIABLE NAME="%%M07" VALUE="7" />
            <VARIABLE NAME="%%PEP-APP_NAME" VALUE="DDDD" />
            <VARIABLE NAME="%%PEP-PLATFORM_NAME" VALUE="LIST" />
            <VARIABLE NAME="%%PEP-TASK_NAME" VALUE="LIST-may" />
            <VARIABLE NAME="%%PEP-ARGUMENTS" VALUE="%%Argument" />
            <VARIABLE NAME="%%PEP-ACCOUNT" VALUE="VALUESSSS" />
            <VARIABLE NAME="%%Y2023" VALUE="G3" />
.........

名称的值以%% PEP - *开头时,我正在尝试获取所有value s。

我正在尝试查找方法,但它不起作用。

for try in j_nodeOS.find(f"./VARIABLE[@NAME='']")

I'm trying to parse a nested XML with ElementTree.

My xml has:
....
.....

       <JOB D="32" APPLICATION="DUDDY"  PARENT_FOLDER="FOLDEXMAPLEL" END_FOLDER="N">
            <VARIABLE NAME="%%YESTER" VALUE="%%$CALCDATE %%$ODATE -2" />
            <VARIABLE NAME="%%Y2020" VALUE="GO" />
            <VARIABLE NAME="%%Y2021" VALUE="G1" />
            <VARIABLE NAME="%%Y2022" VALUE="G2" />
            <VARIABLE NAME="%%M01" VALUE="1" />
            <VARIABLE NAME="%%M02" VALUE="2" />
            <VARIABLE NAME="%%M03" VALUE="3" />
            <VARIABLE NAME="%%M04" VALUE="4" />
            <VARIABLE NAME="%%M05" VALUE="5" />
            <VARIABLE NAME="%%M06" VALUE="6" />
            <VARIABLE NAME="%%M07" VALUE="7" />
            <VARIABLE NAME="%%PEP-APP_NAME" VALUE="DDDD" />
            <VARIABLE NAME="%%PEP-PLATFORM_NAME" VALUE="LIST" />
            <VARIABLE NAME="%%PEP-TASK_NAME" VALUE="LIST-may" />
            <VARIABLE NAME="%%PEP-ARGUMENTS" VALUE="%%Argument" />
            <VARIABLE NAME="%%PEP-ACCOUNT" VALUE="VALUESSSS" />
            <VARIABLE NAME="%%Y2023" VALUE="G3" />
.........

I'm trying to get all VALUEs when the value of NAME begins with %%PEP-*.

I'm trying with the find method but it doesn't work.

for try in j_nodeOS.find(f"./VARIABLE[@NAME='']")

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谜兔 2025-02-16 12:14:32

您可以使用startswith()检查该行。而且,假设您对所有变量行具有相同的格式,则我只是将行分开,直到找到所需的值。

with open('path/to/file', 'r', encoding='utf-8') as file:
    for line in file:
        if line.strip().startswith('<VARIABLE NAME="%%PEP-'):
            print(line.split()[2].split("=")[1])

这会给你

"DDDD"
"LIST"
"LIST-may"
"%%Argument"
"VALUESSSS"

You can check the line using startswith(). And, assuming you have the same format for all VARIABLE lines, I would just split the line until I find the needed value.

with open('path/to/file', 'r', encoding='utf-8') as file:
    for line in file:
        if line.strip().startswith('<VARIABLE NAME="%%PEP-'):
            print(line.split()[2].split("=")[1])

This would give you

"DDDD"
"LIST"
"LIST-may"
"%%Argument"
"VALUESSSS"
秋风の叶未落 2025-02-16 12:14:32

可以用ElementTree来完成,尽管有点麻烦:

import xml.etree.ElementTree as ET
doc = ET.fromstring([your xml above, well formed])
for v in doc.findall('.//VARIABLE'):
    if v.attrib['NAME'].startswith("%%PEP"):
        print(v.attrib['VALUE'])

使用LXML可以容易得多:

from lxml import etree
doc = etree.fromstring([your xml above, well formed])
doc2.xpath('//VARIABLE[starts-with(@NAME,"%%PEP")]/@VALUE')

它应该使您获得相同的输出:

DDDD
LIST
LIST-may
%%Argument
VALUESSSS

It can be done with ElementTree, though it's a bit cumbersome:

import xml.etree.ElementTree as ET
doc = ET.fromstring([your xml above, well formed])
for v in doc.findall('.//VARIABLE'):
    if v.attrib['NAME'].startswith("%%PEP"):
        print(v.attrib['VALUE'])

It's far easier with lxml:

from lxml import etree
doc = etree.fromstring([your xml above, well formed])
doc2.xpath('//VARIABLE[starts-with(@NAME,"%%PEP")]/@VALUE')

and it should get you the same output:

DDDD
LIST
LIST-may
%%Argument
VALUESSSS
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文