簡體   English   中英

在創建XML文件的不同版本時,僅編輯和更新XML文件中的數字文本

[英]Edit and update only numeric text in XML file while creating different versions of the XML file

我正在嘗試對xml文件進行可變性研究。 示例偽代碼如下所示。

<data>
<country name="Liechtenstein">
    <rank updated="yes">2</rank>
    <currency>1.21$/kg</currency> 
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E"/>
    <neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
    <rank updated="yes">5</rank>
    <currency>4.1$/kg</currency> 
    <gdppc>59900</gdppc>
    <neighbor name="Malaysia" direction="N"/>
</country>

我想動態更改(例如乘以1.5)xml中所有數字值的每個文本,例如> 2 <或> 141100 <或NOT> 1.21 $ / kg <或>> 4.1 $ / kg <<。 我需要將每個文本變體保存為不同的xml文件(例如,當我將列支敦士登的排名更改為3時,將xml文件另存為LiechtensteinRank1.5)。

我的目標是轉換每個文本輸入並保存每個更改的所有版本,然后再批量運行xml文件。 xml是相對較深的嵌套200,000行和最多10個不同的子節點。

我只能提取如下文字。

import xml.etree.ElementTree as ET
tree = ET.parse("Ywepr.xml")
root = tree.getroot()
for text in root.itertext():
    print repr(text)   
charlie = file.writelines(root.itertext())

歡迎所有建議。 謝謝

在我看來,你需要對樹進行遍歷才能做到這一點。 原因是您需要實際更新XML元素的文本以使輸出正確。

要遍歷etree的節點,您需要使用Element.getchildren()。 這將返回此元素的所有子元素的列表。 因為英文描述非常粗糙,所以我將啟動代碼。

def traversal(elem):
    text = elem.text
    # do work here

    for node in elem.getchildren():
        traversal(node)

這是對樹遍歷的一種非常經典的遞歸解決方案,您可以逐個節點地進行工作並訪問所有子節點。 最終,你最終都會訪問它們。 請注意,此解決方案要求您的XML數據適合內存,但似乎您已經加載了它,因此此處應保持良好狀態。

我還應該觸摸你需要做什么才能進行文本匹配。 如果您的條件像“所有數字”一樣簡單,我建議使用正則表達式。 我希望下面的內容足以讓你入門。

import re
digitsRegex = re.compile(r'\d+$')
digitsRegex.match('12345')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM