我有一个自定义对象,我已经序列化为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]")
答案 0 :(得分:2)
此xpath //*[starts-with(name(), 'Property')]
应该有效。
使用Linq2Xml:
var xDoc = XDocument.Parse(xmlstring); //or XDocument.Load(xmlfile);
var properties = xDoc.XPathSelectElements("//*[starts-with(name(), 'Property')]")
.ToList();
答案 1 :(得分:1)
这是一个Xpath语句,它将获取MyWebForm.MyObject的所有子项的值
MyWebForm.MyObjectRoot/Objects/MyWebForm.MyObject/*/text()