如何检查未知的 XML 文件以获取其元素或属性?
Posted
技术标签:
【中文标题】如何检查未知的 XML 文件以获取其元素或属性?【英文标题】:How do I inspect an unknown XML file to get its elements or attributes? 【发布时间】:2019-11-28 14:07:06 【问题描述】:我有一个应用程序,用户为我上传一个未知的 XML 文件,我在其中读取内容(我获取每个元素和属性名称),他可以选择哪个属性或元素引用每个对象属性。所以用户配置如何用我们的对象序列化你的 XML。然后我保存映射..
所以问题是将这个 XML 文件转换为我的对象的最佳实践。请记住,XML 可能包含未知的属性或元素值。
例如:
<Students>
<Student>
<Id>474</Id>
<Name>Test</Name>
</Student>
</Students>
还有对象:
public clas Student
public string cod get; set;
public string name get; set;
我附上一张图片,说明用户如何定义 XML 元素或属性与我们的模型类之间的相关性:
【问题讨论】:
这是概念性的还是你开始写代码了?您的用户会定义 XML 元素和模型类之间的关联吗?您可以使用XmlTextReader
之类的东西来“遍历”XML 结构并检查其元素和属性。
还有一件事,“序列化/反序列化”是指当您采用已知类型时,您可以将其从内存中的对象转换为文本,然后再转换回内存中的对象。它主要用于存储和传输应用程序状态。我认为您的标题应该类似于“如何检查未知 XML 文件以获取其元素”
更多信息:***.com/questions/10150785/using-xmltextreader
谢谢你的回答,我已经开始写代码了。是的,用户定义了相关性。我会检查XmlTextReader
。我需要将任何 XML 转换为我的对象类。但问题是有时 XML 可以包含 Element 或 Attribute 值..
【参考方案1】:
在使用XmlSerializer
的情况下,可以使用XmlAttributeOverrides
进行映射。
string codMapping = "Id"; // get from user
string nameMapping = "Name"; // get from user
var overrides = new XmlAttributeOverrides();
var attrCod = new XmlAttributes();
var attrName = new XmlAttributes();
attrCod.XmlElements.Add(new XmlElementAttribute(codMapping));
attrName.XmlElements.Add(new XmlElementAttribute(nameMapping));
overrides.Add(typeof(Student), nameof(Student.cod), attrCod);
overrides.Add(typeof(Student), nameof(Student.name), attrName);
var xs = new XmlSerializer(
typeof(List<Student>), overrides, null, new XmlRootAttribute("Students"), null);
List<Student> students;
using (var fs = new FileStream("test.xml", FileMode.Open))
students = (List<Student>)xs.Deserialize(fs);
foreach (var s in students)
Console.WriteLine(s.cod + " " + s.name);
【讨论】:
太棒了!它可以是解决方案..但我有一个问题,是否可以为会员执行解决方案?像映射解析器..以上是关于如何检查未知的 XML 文件以获取其元素或属性?的主要内容,如果未能解决你的问题,请参考以下文章