在c#中解析XML
本文关键字:XML | 更新日期: 2023-09-27 18:05:34
我还在做一个项目,我非常喜欢它。
我想看看是否可以使用XML实现实时更新提要
目前我甚至不知道如何解析这种特殊类型的XML,因为我找到的所有教程都是解析节点值等
但是我在想一些类似于
的东西<Object name="ObjectName" type="ObjectType" size="ObjectSize" image="ObjectImage" />
如果你们能帮助我理解如何从那个节点访问内部元素,那将是惊人的,如果它不是太多的要求只是一个小的解释,所以我理解。我知道如何解析这样的XML使用XElement
<Object>
<Name>ObjectName</Name>
<Type>ObjectType</Type>
<Size>ObjectSize</Size>
<Image>ObjectImage</Image>
</Object>
我似乎无法解析顶部的示例,我不介意如果它是Linq,只要它是在c#中,也许告诉我为什么你会选择一个而不是另一个?你也有关于如何检查文件是否已经改变,所以我可以实现一个实时更新的想法吗?
谢谢你的帮助
约翰顶部的示例使用属性而不是子元素,但是使用
同样容易:XElement element = XElement.Parse(xml);
string name = (string) element.Attribute("name");
string type = (string) element.Attribute("type");
string size = (string) element.Attribute("size");
string image = (string) element.Attribute("image");
我通常更喜欢使用显式字符串转换而不是Value
属性,就像你在null
引用上执行转换一样,你只是以null
字符串引用而不是NullReferenceException
结束。当然,如果缺少属性是编程错误,那么异常更合适,Value
属性就可以了。(顺便说一下,同样的逻辑也适用于转换XElement
值)
如果您有一个表示文档的域对象(通常是这种情况),那么XmlSerializer非常容易使用。
[XmlRoot("Object")
public class Item
{
public string Name { get; set; }
public string Type { get; set; }
public string Size { get; set; }
public string Image { get; set; }
}
用法:
XmlSerializer ser = new XmlSerializer(typeof(Item));
Item item = (Item)ser.Deserialize(someXmlStream);
我发现当整个文档表示某种类型的域对象时,使用这种方法比手动解析更容易。
Use也可以使用XEelment.FirstAttribute
获取元素的第一个属性,然后使用XAttribute.NextAttribute
循环遍历所有属性。这并不依赖于您知道该属性是否存在。
XAttribute attribute = element.FirstAttribute;
while (attribute != null)
{
// Do stuff
attribute = attribute.NextAttribute`
}