c# - C# 将 XML 文件从给定标签解析为对象
问题描述
我有一个 xml 文件,并且我想制作成一个对象的数据集被另一个标签封装,所以当我尝试解析它时,由于意外成员,它当然会抛出 InvalidOperationException。
我已经尝试阅读有关 xml 的各种 MS Docs,以及在谷歌上搜索我的问题,但是如果没有太多的麻烦,我找不到如何解决它。
我的代码:
public static ClassToDeserialize GetObjectFromXml (string path)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ClassToDeserialize));
System.IO.FileStream file = System.IO.File.OpenRead(path);
ClassToDeserialize loadedObjectXml = xmlSerializer.Deserialize(file) as ClassToDeserialize;
return loadedLicenseXml;
}
那么我怎么能告诉这个程序只从一个特定的标签开始反序列化,因为它包含对象的相关 xml 数据呢?
解决方案
您可以尝试在找到节点的位置阅读 Xml,然后检索它的外部 xml 并将其放入XmlSerializer
. 假设您有一个像这样的简单 XML 文件:
<rootnode>
<!-- some nodes inside -->
<uselessNode>
<thatsWhatIWant>
<!-- some fields inside -->
<uselessNodeInside/>
<usefullNodeInside/>
</thatsWhatIWant>
</uselessNode>
</rootnode>
你可以做的是打开XmlReader
:
XmlReader reader = XmlReader.Create("path/to/myfile.xml");
然后将内容读取到您的 POI 并将其存储在某个变量中:
string wantedNodeContents = string.Empty;
while (reader.Read())
{
if(reader.NodeType == XmlNodeType.Element && reader.Name == "thatsWhatIWant")
{
wantedNodeContents = reader.ReadOuterXml();
break;
}
}
有了这个,你应该可以XmlSerializer
像这样使用:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ClassToDeserialize));
System.IO.TextReader textReader = System.IO.StringReader(wantedNodeContents);
ClassToDeserialize loadedObjectXml = xmlSerializer.Deserialize(textReader) as ClassToDeserialize;
您可以选择(或除此之外)尝试为UnknownNode
and添加一些处理程序UnknownAttribute
:
xmlSerializer.UnknownNode+= new XmlNodeEventHandler(UnknownNode);
xmlSerializer.UnknownAttribute+= new XmlAttributeEventHandler(UnknownAttribute);
void UnknownNode(object sender, XmlNodeEventArgs e) { }
void UnknownAttribute(object sender, XmlAttributeEventArgs e) { }
推荐阅读
- firebase - 在 Flutter 中从 Firebase 中检索数组
- java - JOptionPane 显示消息对话框无法在焦点侦听器中关闭
- php - laravel查询bewteen
- javascript - 带有表情符号代码的文本中的javascript错误意外标识符
- java - Intellij 忽略 .gitignore 文件 - 灰色图标、无符号、斜线圆圈、斜线符号
- c++ - 如何实现基于其他选定选项限制选项的列表功能?
- sql - 从两个不同的表中找到 sum() 并根据条件加入它们?
- php - 如何检索错误的字符集编码字符串?
- python - 熊猫在多行中拆分行
- python - zlib解压压缩时如何保留header和trailer