1

私のファイルには次のデータが含まれています。

オリジナル:

<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <changefreq>daily</changefreq> <loc>http://www.example.com</loc></url></urlset>

期待される:

<?xml version="1.0" encoding="UTF-8"?><urlset> <url> <changefreq>daily</changefreq> <loc>http://www.example.com</loc></url></urlset>

etree を使用してファイルを解析し、ルート要素 'urlset' から属性を削除したい

import xml.etree.ElementTree as ET

tree = ET.parse("/Users/hsyang/Downloads/VI-0-11-14-2016_20.xml")
root = tree.getroot()

print root.attrib
>> {}

root.attrib.pop("xmlns", None)

print root.attrib
>> {}
ET.tostring(root)

初めて root.attrib を印刷したときに {xmlns:" http://www.sitemaps.org/schemas/sitemap/0.9 "}を取得するはずだと思っていましたが、空の辞書を取得しました。誰か助けてくれませんか?

感謝します!

4

2 に答える 2

1

xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"通常の属性のように見えますが、これは特殊なケース、つまり名前空間宣言です。

名前空間の削除、追加、または変更は非常に難しい場合があります。「通常の」属性は、要素の書き込み可能なattribプロパティに格納されます。一方、ネームスペース マッピングは、API を介して簡単に利用することはできません (lxml ライブラリでは、要素にはnsmapプロパティがありますが、読み取り専用です)。

Modify namespaces in a given xml document with lxmlへの回答と同様に、単純なテキストの検索と置換操作を提案します。このようなもの:

with open("input.xml", "r") as infile, open("output.xml", "w") as outfile:
    data = infile.read()
    data = data.replace(' xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"', '')
    outfile.write(data)

Python で名前空間とプレフィックスを XML 文字列に挿入する方法も参照してください。.

于 2016-12-05T16:32:57.613 に答える