C# 是否可以将XML文档反序列化为XML文档,而不是对象文件?

C# 是否可以将XML文档反序列化为XML文档,而不是对象文件?,c#,xaml,xml-serialization,uwp-xaml,xml-deserialization,C#,Xaml,Xml Serialization,Uwp Xaml,Xml Deserialization,我有两个不同版本的XML文件。第一个是与较小的元素,因为它是开发较早。现在,新版本有了额外的元素。我正在创建一个应用程序来检测xml文档的版本如果所选文档是版本0(元素较少的旧版本),那么我需要添加新元素并创建一个新的xml版本(版本1)。因此,对xaml或xml使用序列化器或反序列化器是最好的方法,或者有其他方法可以完成我的任务吗?我想用新元素更新旧的xml文件,并将它们保存为version1 我通过在xml文档中运行for循环来检查xml的版本,因为有一个指定xml版本的child属性。如果

我有两个不同版本的XML文件。第一个是与较小的元素,因为它是开发较早。现在,新版本有了额外的元素。我正在创建一个应用程序来检测xml文档的版本如果所选文档是版本0(元素较少的旧版本),那么我需要添加新元素并创建一个新的xml版本(版本1)。因此,对xaml或xml使用序列化器或反序列化器是最好的方法,或者有其他方法可以完成我的任务吗?我想用新元素更新旧的xml文件,并将它们保存为version1


我通过在xml文档中运行for循环来检查xml的版本,因为有一个指定xml版本的child属性。

如果您有一个类要对旧版本和新版本进行反序列化,应该不会有问题


首先将旧XML反序列化为新类的对象。然后您可以设置对象的新字段并将其序列化回xml。

如果您有一个类要对旧版本和新版本进行反序列化,那么应该不会有问题


首先将旧XML反序列化为新类的对象。然后您可以设置对象的新字段并将其序列化回xml。

也许您可以尝试
XDocument

  • 使用
    System.Xml.Linq
    名称空间
  • 加载文件
    XDocument doc=XDocument.load(文件路径)
  • 搜索特殊节点(您的版本节点)
  • 更新版本属性
    el.SetAttributeValue(“版本”,1)
  • 也许你需要删除一些节点
  • 添加节点
  • 保存文件

也许你可以试试
XDocument

  • 使用
    System.Xml.Linq
    名称空间
  • 加载文件
    XDocument doc=XDocument.load(文件路径)
  • 搜索特殊节点(您的版本节点)
  • 更新版本属性
    el.SetAttributeValue(“版本”,1)
  • 也许你需要删除一些节点
  • 添加节点
  • 保存文件


我认为你正在做的很好:使用旧格式反序列化,然后使用新格式重新序列化。谢谢mathew!!melody Zhou也给出了完美的解决方案:)谢谢你的时间!!您好@Faraazhilwade,如果下面的答案可以解决您的问题,请将其标记为答案,这将帮助更多与您有相同问题的人。:)当然可以@richasy!!!我一做完就去!!我认为你正在做的很好:使用旧格式反序列化,然后使用新格式重新序列化。谢谢mathew!!melody Zhou也给出了完美的解决方案:)谢谢你的时间!!您好@Faraazhilwade,如果下面的答案可以解决您的问题,请将其标记为答案,这将帮助更多与您有相同问题的人。:)当然可以@richasy!!!我一做完就去!!非常感谢melody!!嗨,melody,谢谢你的帮助!!由于我是XML-LINQ新手,我需要从XML中的特定属性获取值,并将其保存在公共字符串中。。。我试着使用后代的方法,但我的努力是徒劳的!!!我想从属性“value”中获取值“Biotest AG”。。。。在以下XML中:您需要来自特定节点的字符串集合,或者需要来自特定节点的值?
var list=doc.subscriptions(“nodeName”).Select(node=>node.Attribute(“value”).value.ToList()
如果您需要特定的节点属性值,
子体(…).FirstOrDefault(n=>您的过滤器)?。选择(…)
谢谢!!!我是这样计算出来的
IEnumerable CustomerName=来自文档子体(“属性”)中的temp.Attribute(“ID”)。其中(v=>v.Attribute(“ID”).Value==“S_Customer”)选择temp.Attribute(“Value”).Value;foreach(客户名称中的字符串项){result.S_Customer=item;}
非常感谢!!嗨,melody,谢谢你的帮助!!由于我是XML-LINQ新手,我需要从XML中的特定属性获取值,并将其保存在公共字符串中。。。我试着使用后代的方法,但我的努力是徒劳的!!!我想从属性“value”中获取值“Biotest AG”。。。。在以下XML中:您需要来自特定节点的字符串集合,或者需要来自特定节点的值?
var list=doc.subscriptions(“nodeName”).Select(node=>node.Attribute(“value”).value.ToList()
如果您需要特定的节点属性值,
子体(…).FirstOrDefault(n=>您的过滤器)?。选择(…)
谢谢!!!我是这样计算出来的
IEnumerable CustomerName=来自文档子体(“属性”)中的temp.Attribute(“ID”)。其中(v=>v.Attribute(“ID”).Value==“S_Customer”)选择temp.Attribute(“Value”).Value;foreach(客户名称中的字符串项){result.S_Customer=item;}
谢谢。。虽然melody的方法可以解决我的问题,但我真正的疑问是我是否可以用序列化器和反序列化器解决我的任务。。从你的反应来看,我似乎能。。!!非常感谢。虽然melody的方法可以解决我的问题,但我真正的疑问是我是否可以用序列化器和反序列化器解决我的任务。。从你的反应来看,我似乎能。。!!
var el = doc.Descendants("Version").Where(v => v.Attribute("version").Value =="0").FirstOrDefault();
if (el != null)
{
doc.Root.Remove(); //delete all nodes
doc.Descendants("NodeName").ToList().ForEach(xe => xe.Remove()); //delete nodename equals NodeName nodes
doc.Add(new XElement("...", new XAttribute("ID", 1)));//if you delete all nodes,you need add a root node
doc.Root.Add(new XElement("...", new XAttribute("ID", 1))); //add nodes
doc.Root.Element("...").Add(new XElement("...", new XAttribute("ID", 2)));  ////add nodes
doc.Save(filePath);
}