在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#中,也许告诉我为什么你会选择一个而不是另一个?你也有关于如何检查文件是否已经改变,所以我可以实现一个实时更新的想法吗?

谢谢你的帮助

约翰

在c#中解析XML

顶部的示例使用属性而不是子元素,但是使用

同样容易:
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`
}
相关文章:
  • 没有找到相关文章