修改xml文件

一、前言

本节是修改xml;同样方法也可修改arxml文件;主要使用LET.Element创建节点;

二、知识点

 1、专门用于格式化处理xml文件使其具有层级分明的缩进函数

#专门用于格式化处理xml文件使其具有层级分明的缩进

def indent( elem, level=0):

    i = "\n" + level * "  "

    if len(elem):

        if not elem.text or not elem.text.strip():

            elem.text = i + "  "

        if not elem.tail or not elem.tail.strip():

            elem.tail = i

        for elem in elem:

            indent(elem, level + 1)

        if not elem.tail or not elem.tail.strip():

            elem.tail = i

    else:

        if level and (not elem.tail or not elem.tail.strip()):

            elem.tail = i

2、修改XML文件

#举例1:添加节点'country'

import lxml.etree as LET

tree = LET.parse('country_data.xml')

root = tree.getroot()

"""

country_ref = LET.Element("neighbor")

country_ref.attrib['name'] = 'china'

country =root.findall('country')

print(country)

country[0].append(country_ref)

indent(root)

tree.write("d:/myself/write_arxml/country_data.xml", xml_declaration=True, encoding='utf-8')

"""

#alt+shift+A  整段注销

3、修改节点rank文本值,添加属性

#举例2:修改节点rank文本值,添加属性

"""

for rank in root.iter('rank'):

    new_rank = int(rank.text) + 1

    rank.text = str(new_rank)

    rank.set('updated', 'yes')

tree.write('output.xml')

 """

4、删除节点

#举例3 删除节点

"""

for country in root.findall('country'):

    # using root.findall() to avoid removal during traversal

    rank = int(country.find('rank').text)

    if rank > 50:

        root.remove(country)

tree.write('output.xml')

 """

5、 构建 XML 文档

#知识点4:构建 XML 文档¶

""" a = LET.Element('a')

b = LET.SubElement(a, 'b')

c = LET.SubElement(a, 'c')

d = LET.SubElement(c, 'd')

LET.dump(a) #Writes an element tree or element structure to sys.stdout.

 """


三、实例 代码


import lxml.etree as LET
#专门用于格式化处理xml文件使其具有层级分明的缩进
def indent( elem, level=0):
    i = "\n" + level * "  "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
        for elem in elem:
            indent(elem, level + 1)
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
    else:
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = i
#alt+shift+A  整段注销
#可以通过从文件中读取来导入此数据:
tree = LET.parse('country_data.xml')
root = tree.getroot()
#可以迭代的子节点
""" for child in root:
    print(child.tag, child.attrib) """
#子级是可以嵌套的,我们可以通过索引访问特定的子级节点
""" print(root[0][2].text) """
#递归遍历其下的所有子树(包括子级,子级的子级,等等)

""" for neighbor in root.iter('neighbor'):
    print(neighbor.attrib) """
print("find:===============")
""" for neighbor in root.findall('neighbor'):
    #rank = country.find('rank').text
    #name = country.get('name')
    print(neighbor.attrib) """
    
    #print(name, rank)
""" for neighbor in root.xpath('country'):
    print(neighbor.attrib)
    test = neighbor.getparent().find('rank').text
    print(test) """
country_ref = LET.Element("neighbor")
country_ref.attrib['name'] = 'china'

country =root.findall('country')
print(country)
country[0].append(country_ref)
indent(root)
tree.write("d:/myself/write_arxml/country_data.xml", xml_declaration=True, encoding='utf-8')

四、运行代码后

五、测试用 xml文件

<?xml version='1.0' encoding='UTF-8'?>
<data>
  <country name="Liechtenstein">
    <rank>1</rank>
    <year>2008</year>
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E"/>
    <neighbor name="Switzerland" direction="W"/>
  </country>
  <country name="Singapore">
    <rank>4</rank>
    <year>2011</year>
    <gdppc>59900</gdppc>
    <neighbor name="Malaysia" direction="N"/>
  </country>
  <country name="Panama">
    <rank>68</rank>
    <year>2011</year>
    <gdppc>13600</gdppc>
    <neighbor name="Costa Rica" direction="W"/>
    <neighbor name="Colombia" direction="E"/>
  </country>
</data>

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: MFC(Microsoft Foundation Classes)是一个应用程序框架,可用于开发Windows操作系统下的C++应用程序。要实现通过MFC修改XML文件的数据,可以采用以下几个步骤: 1. 导入所需的MFC类库和头文件。 要使用MFC操作XML文件,需要在C++代码中包含afx.h头文件,并在项目设置中添加对MFC的依赖。 2. 载入XML文件。 使用MFC提供的CMarkup类或CXmlDocument类,先载入需要修改XML文件。通过调用Load或Open方法打开XML文件并将其加载到内存中。 3. 寻找需要修改的节点。 根据XML结构,使用MFC提供的节点遍历方法或XPath表达式,在XML文件中找到需要修改的特定节点。 4. 修改节点的属性或文本内容。 通过调用MFC提供的方法,可直接修改找到的节点的属性或文本内容。例如,使用SetAttrib或SetText方法设置节点的属性或文本。 5. 保存修改后的XML文件。 通过调用Save方法或SaveToFile方法,将修改后的XML文件保存到磁盘上。 下面是一个示例代码,以MFC和CMarkup类为例,演示修改XML文件中一个特定节点的属性: ```cpp #include "stdafx.h" #include "Markup.h" using namespace std; int main() { CMarkup xml; if (xml.Load("example.xml")) // 载入XML文件 { if (xml.FindElem("book")) // 找到book节点 { xml.SetAttrib("category", "new_category"); // 修改book节点的category属性值 xml.Save("modified_example.xml"); // 保存修改后的XML文件 } xml.Close(); } return 0; } ``` 以上是一个简单的示例,可根据实际需求和XML文件的复杂程度进行相应的修改和优化。通过MFC实现修改XML文件数据需要熟悉MFC框架和XML文件的结构,掌握相关的MFC类和方法,以便灵活操作XML文件中的数据。 ### 回答2: 在MFC中实现修改XML文件数据需要使用CMarkup类。CMarkup是MFC中的一个轻量级XML解析类,可以方便地读取和修改XML文件。 首先,在程序中引入CMarkup类的头文件。 然后,使用CMarkup的Open方法打开XML文件,可以选择只读或读写模式。打开后,可以使用CMarkup的FindElem和FindChildElem方法定位到需要修改XML元素。 接下来,使用CMarkup的SetAttrib方法可以修改元素的属性值,使用SetData方法可以修改元素的文本值。 修改完成后,使用CMarkup的Save方法保存修改后的XML文件。 以下是一个简单的示例代码: ```cpp #include <afxmarkup.h> void ModifyXMLData() { CMarkup xml; if (xml.Load("data.xml")) { if (xml.FindElem("root")) { xml.IntoElem(); // 进入root元素 while (xml.FindElem("item")) { xml.SetAttrib("attribute", "new value"); xml.SetData("new data"); } } xml.Save("data.xml"); xml.Close(); } } ``` 这段代码假设XML文件名为data.xmlXML结构如下: ```xml <root> <item attribute="old value">old data</item> <item attribute="old value">old data</item> ... </root> ``` 代码中会将所有item元素的attribute属性修改为"new value",文本值修改为"new data",然后保存修改后的XML文件。 通过以上步骤,就可以在MFC中实现修改XML文件数据了。 ### 回答3: MFC(Microsoft Foundation Classes)是一种用于开发Windows应用程序的C++框架。要实现修改XML文件数据,可以按照以下步骤进行: 1. 使用MFC提供的CFile类打开XML文件。可以使用CFile的Open函数,指定文件路径和打开模式(例如读写模式)。 2. 创建一个XML文档对象。可以使用MSXML库提供的CComPtr类,通过调用其CreateInstance函数来创建一个用于解析和修改XML的DOM文档对象。 3. 使用DOM文档对象加载之前打开的XML文件。可以使用CComPtr类的Load函数,将XML文件加载到DOM文档对象中。 4. 使用DOM文档对象进行数据修改。可以使用CComPtr类提供的各种方法和属性,来获取和修改XML文件中的数据。例如,可以使用getElementsByTagName函数获取特定元素的集合,然后通过遍历集合来修改元素的属性或内容。 5. 将修改后的数据保存回XML文件。可以使用CComPtr类的Save函数,将DOM文档对象保存到同一路径的XML文件中。 6. 在完成修改后,关闭XML文件。可以使用CFile类的Close函数,关闭之前打开的XML文件。 7. 程序的其他部分需要根据具体需求进行设计,例如用户界面的布局和交互等。 总结起来,使用MFC实现修改XML文件数据的关键步骤包括:打开XML文件、创建DOM文档对象、加载XML文件修改数据、保存到XML文件以及关闭文件。使用CFile类和CComPtr类可以实现这些步骤,并结合MFC的其他功能来完成个性化的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流动的星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值