5

XML ファイルで指定された属性の値approved-byを「いいえ」から「はい」に変更する必要があります。これが私のxmlファイルです:

<?xml version="1.0" encoding="UTF-8" ?>
<!--Arbortext, Inc., 1988-2008, v.4002-->
<!DOCTYPE doc PUBLIC "-//MYCOMPANY//DTD XSEIF 1/FAD 110 05 R5//EN"
     "XSEIF_R5.dtd">
<doc version="XSEIF R5" xmlns="urn:x-mycompany:r2:reg-doc:1551-fad.110.05:en:*">
    <meta-data>
        <?Pub Dtl?>
            <confidentiality class="mycompany-internal" />
            <doc-name>INSTRUCTIONS</doc-name>
            <doc-id>
                <doc-no type="registration">1/1531-CRA 119 1364/2</doc-no>
                <language code="en" />
                <rev>PA1</rev>
                <date>
                    <y>2013</y>
                    <m>03</m>
                    <d>12</d>
                </date>
            </doc-id>
            <company-id>
                <business-unit></business-unit>
                <company-name></company-name>
                <company-symbol logotype="X"></company-symbol>
            </company-id>
            <title>SIM Software Installation Guide</title>
            <drafted-by>
                <person>
                    <name>Shahul Hameed</name>
                    <signature>epeeham</signature>
                </person>
            </drafted-by>
            <approved-by approved="no">
                <person>
                    <name>AB</name>
                    <signature>errrrrn</signature>
            </approved-by>

私は 2 つの方法で試しましたが、どちらも失敗しました。私の最初の方法は

import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element

root = ET.parse('Path/1_1531-CRA 119 1364_2.xml')
sh = root.find('approved-by')
sh.set('approved', 'yes')
print etree.tostring(root)

このようにして、というエラーメッセージが表示されましたAttributeError: 'NoneType' object has no attribute 'set'

そこで、別の方法を試しました。

import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element

root = ET.parse('C:/Path/1_1531-CRA 119 1364_2.xml')
elem = Element("approved-by")
elem.attrib["approved"] = "yes"

エラーも発生せず、属性も設定されませんでした。私は混乱しており、このスクリプトの問題点を見つけることができません。

4

1 に答える 1

11

あなたが提供した xml は有効ではないため、以下に例を示します。

import xml.etree.ElementTree as ET


xml = """<?xml version="1.0" encoding="UTF-8"?>
<body>
    <approved-by approved="no">
        <name>AB</name>
        <signature>errrrrn</signature>
    </approved-by>
</body>
"""

tree = ET.fromstring(xml)
sh = tree.find('approved-by')
sh.set('approved', 'yes')

print ET.tostring(tree)

プリント:

<body>
    <approved-by approved="yes">
        <name>AB</name>
        <signature>errrrrn</signature>
    </approved-by>
</body>

したがって、最初に試した方法が機能します。それが役立つことを願っています。

于 2013-07-29T10:58:55.227 に答える