C产品在市场上有哪些独特优势?
- 内容介绍
- 文章标签
- 相关推荐
本文共计740个文字,预计阅读时间需要3分钟。
今天有个网友问如何遍历对象的全部公有属性,并生成XML。这里提供一个简单的手工解析例子,这样初学者更容易理解,也更生动。
假设有一个简单的对象,包含几个公有属性:
pythonclass Person: def __init__(self, name, age, gender): self.name=name self.age=age self.gender=gender
我们可以通过以下步骤遍历这个对象的公有属性,并生成XML格式:
1. 创建一个XML元素,表示根节点。
2.遍历对象的属性,为每个属性创建一个XML子元素。
3.将属性值设置为子元素的文本内容。
下面是代码实现:
python
import xml.etree.ElementTree as ETdef object_to_xml(obj): root=ET.Element(root) for key, value in obj.__dict__.items(): child=ET.SubElement(root, key) child.text=str(value) return ET.tostring(root, encoding='utf-8', method='xml').decode('utf-8')
创建一个Person对象person=Person(张三, 30, 男)
将对象转换为XMLxml_str=object_to_xml(person)print(xml_str)
输出结果:
xml 张三 30 男
这样,我们就成功地遍历了对象的公有属性,并生成了XML格式。这种方法简单易懂,适合初学者学习和使用。
今天有个网友问如何历遍对象的所有公共属性,并且生成XML。采用序列化方式的话比较简单,我写个手工解析的例子,这样能让初学者更加理解也比较灵活,记录一下吧或许会有人用到。
对象模型:
public class Master { public string Description { get; set; } public List<Slave> Slaves { get; set; } } public class Slave { public int ID { get; set; } public string Name { get; set; } }
解析代码:
//生成数据
Master master = new Master();
master.Description = "ABCD";
master.Slaves = new List<Slave>();
master.Slaves.Add(new Slave { Name = "aaa", ID = 1 });
master.Slaves.Add(new Slave { Name = "bbb", ID = 2 });
master.Slaves.Add(new Slave { Name = "cccc", ID = 3 });
StringBuilder sb = new StringBuilder("<Root>\r\n");
//获取对象所有公共属性
foreach (PropertyInfo pi in master.GetType().GetProperties())
{
//判断属性是否为集合类型
if (pi.PropertyType.IsGenericType)
{
sb.AppendLine($"<Items name=\"{pi.Name}\">");
//获取集合对象
foreach (object items in (pi.GetValue(master, null) as IEnumerable<object>))
{
sb.AppendLine($"<{items.GetType().Name}>");
//获取集合对象成员
foreach (PropertyInfo item in items.GetType().GetProperties())
{
sb.AppendLine($"<{item.Name}>{item.GetValue(items, null)}</{item.Name}>");
}
sb.AppendLine($"</{items.GetType().Name}>");
}
sb.AppendLine("</Items>");
}
else
{
sb.AppendLine($"<{pi.Name}>{pi.GetValue(master, null)}</{pi.Name}>");
}
}
sb.AppendLine("</Root>");
MessageBox.Show(sb.ToString());
生成的XML结构:
<Root> <Description>ABCD</Description> <Items name="Slaves"> <Slave> <ID>1</ID> <Name>aaa</Name> </Slave> <Slave> <ID>2</ID> <Name>bbb</Name> </Slave> <Slave> <ID>3</ID> <Name>cccc</Name> </Slave> </Items> </Root>
本文共计740个文字,预计阅读时间需要3分钟。
今天有个网友问如何遍历对象的全部公有属性,并生成XML。这里提供一个简单的手工解析例子,这样初学者更容易理解,也更生动。
假设有一个简单的对象,包含几个公有属性:
pythonclass Person: def __init__(self, name, age, gender): self.name=name self.age=age self.gender=gender
我们可以通过以下步骤遍历这个对象的公有属性,并生成XML格式:
1. 创建一个XML元素,表示根节点。
2.遍历对象的属性,为每个属性创建一个XML子元素。
3.将属性值设置为子元素的文本内容。
下面是代码实现:
python
import xml.etree.ElementTree as ETdef object_to_xml(obj): root=ET.Element(root) for key, value in obj.__dict__.items(): child=ET.SubElement(root, key) child.text=str(value) return ET.tostring(root, encoding='utf-8', method='xml').decode('utf-8')
创建一个Person对象person=Person(张三, 30, 男)
将对象转换为XMLxml_str=object_to_xml(person)print(xml_str)
输出结果:
xml 张三 30 男
这样,我们就成功地遍历了对象的公有属性,并生成了XML格式。这种方法简单易懂,适合初学者学习和使用。
今天有个网友问如何历遍对象的所有公共属性,并且生成XML。采用序列化方式的话比较简单,我写个手工解析的例子,这样能让初学者更加理解也比较灵活,记录一下吧或许会有人用到。
对象模型:
public class Master { public string Description { get; set; } public List<Slave> Slaves { get; set; } } public class Slave { public int ID { get; set; } public string Name { get; set; } }
解析代码:
//生成数据
Master master = new Master();
master.Description = "ABCD";
master.Slaves = new List<Slave>();
master.Slaves.Add(new Slave { Name = "aaa", ID = 1 });
master.Slaves.Add(new Slave { Name = "bbb", ID = 2 });
master.Slaves.Add(new Slave { Name = "cccc", ID = 3 });
StringBuilder sb = new StringBuilder("<Root>\r\n");
//获取对象所有公共属性
foreach (PropertyInfo pi in master.GetType().GetProperties())
{
//判断属性是否为集合类型
if (pi.PropertyType.IsGenericType)
{
sb.AppendLine($"<Items name=\"{pi.Name}\">");
//获取集合对象
foreach (object items in (pi.GetValue(master, null) as IEnumerable<object>))
{
sb.AppendLine($"<{items.GetType().Name}>");
//获取集合对象成员
foreach (PropertyInfo item in items.GetType().GetProperties())
{
sb.AppendLine($"<{item.Name}>{item.GetValue(items, null)}</{item.Name}>");
}
sb.AppendLine($"</{items.GetType().Name}>");
}
sb.AppendLine("</Items>");
}
else
{
sb.AppendLine($"<{pi.Name}>{pi.GetValue(master, null)}</{pi.Name}>");
}
}
sb.AppendLine("</Root>");
MessageBox.Show(sb.ToString());
生成的XML结构:
<Root> <Description>ABCD</Description> <Items name="Slaves"> <Slave> <ID>1</ID> <Name>aaa</Name> </Slave> <Slave> <ID>2</ID> <Name>bbb</Name> </Slave> <Slave> <ID>3</ID> <Name>cccc</Name> </Slave> </Items> </Root>

