将文本附加到xml标记值

2024-09-24 06:30:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在下面xml行的“INCOND”标记中的“NAME”值的末尾添加一个文本。在

<System>
    <FOLDER FOLDER_NAME="Production" >
        <JOB JOBNAME="JOB1" >
            <INCOND NAME="First-Cond-PROD" ODATE="ODAT" />
        </JOB>
        <JOB JOBNAME="JOB1" >
            <INCOND NAME="Second-Cond-PROD" ODATE="ODAT" />
        </JOB>
        <JOB JOBNAME="JOB1" >
            <INCOND NAME="Third-Cond-PROD" ODATE="ODAT" />
        </JOB>
    </FOLDER>
</System>

我已经看过xmled、sed示例,但这些示例有助于替换值。由于我要修改的3K条目中的值不是恒定的,所以我引用的那个没有帮助。我想要的输出如下所示:

^{pr2}$

你能帮我找到一个实现这个目标的方法吗?在


Tags: name标记示例jobprodxmlfoldersystem
2条回答

这就是你想做的吗?在

$ sed 's/\(<INCOND.*\)"/\1-DR"/' file
<System>
    <FOLDER FOLDER_NAME="Production" >
        <JOB JOBNAME="JOB1" >
            <INCOND NAME="First-Cond-PROD-DR" />
        </JOB>
        <JOB JOBNAME="JOB1" >
            <INCOND NAME="Second-Cond-PROD-DR" />
        </JOB>
        <JOB JOBNAME="JOB1" >
            <INCOND NAME="Third-Cond-PROD-DR" />
        </JOB>
    </FOLDER>
</System>

既然您的问题标记为python,这里有一个使用lxml的选项。。。在

Python3.6

from lxml import etree

tree = etree.parse("input.xml")

for attr in tree.xpath("//INCOND/@NAME"):
    attr.getparent().attrib["NAME"] = f"{attr}-DR"

print(etree.tostring(tree, encoding="unicode"))

输出

^{pr2}$

我更喜欢lxml而不是ElementTree,因为它更好地支持xpath,但是ElementTree是另一个选项(与上面的输出相同)。。。在

Python3.6

import xml.etree.ElementTree as etree

tree = etree.parse("input.xml")

for elem in tree.findall(".//INCOND[@NAME]"):
    elem.set("NAME", f"{elem.get('NAME')}-DR")

print(etree.tostring(tree.getroot(), encoding="unicode"))

您还可以使用xmlstarlet(与上面相同的输出)。。。在

xmlstarlet命令行

xmlstarlet ed -u '//INCOND/@NAME' -x 'concat(.,"-DR")' input.xml

相关问题 更多 >