序列化XML文件的XPath表达式

本文关键字:XPath 表达式 文件 XML 序列化 | 更新日期: 2023-09-27 18:09:13

我有一个已序列化为XML的自定义对象。

类结构如下:

public partial class MyWebForm : System.Web.UI.Page
{
    [DataContract, Serializable]
    public class MyObjectRoot
    {
        public MyObjectRoot(List<MyObject> myobjects)
        {
            this.Objects = myobjects;
        }
        [DataMember]
        public List<MyObject> Objects { get; set; }
    }
    [DataContract, Serializable]
    public class MyObject
    {
        public MyObject(string property1, string property2, string property3)
        {
            this.Property1 = property1;
            this.Property2 = property2;
            this.Property3 = property3;
        }
        [DataMember]
        public string Property1 { get; set; }
        [DataMember]
        public string Property2 { get; set; }
        [DataMember]
        public string Property2 { get; set; }
    }
}

序列化后的XML如下所示:

`<?xml version="1.0" encoding="utf-8"?>
 <MyWebForm.MyObjectRoot xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MyApplication">
<Objects>
    <MyWebForm.MyObject>
      <Property1>Testing123</Property1>
      <Property2>Testing456</Property2>
      <Property3>Testing789</Property3>
    </MyWebForm.MyObject>
  </Objects>
</MyWebForm.MyObjectRoot >`

可以使用XPath获取序列化XML文件上的节点吗?如果是这样的话,我的对象的每个属性,也就是我的MyWebForm.MyObject中的值的表达式是什么?

到目前为止,我已经试过了,没有运气:

XPath("MyWebForm.MyObjectRoot/Objects/MyWebForm.MyObject/Property1[1]")

序列化XML文件的XPath表达式

这个xpath //*[starts-with(name(), 'Property')]应该可以工作。

using Linq2Xml:

var xDoc = XDocument.Parse(xmlstring); //or XDocument.Load(xmlfile);
var properties = xDoc.XPathSelectElements("//*[starts-with(name(), 'Property')]")
                     .ToList();

下面是一个Xpath语句,它将获取MyWebForm所有子元素的值。MyObject

MyWebForm.MyObjectRoot/Objects/MyWebForm.MyObject/*/text()