我的应用程序将内容保存到XML文件或从XML文件读取内容。 内容是项目结构,XML文件随处可见。
例如,我的应用程序使用的XML文件的结构如下所示。
<Project version="1">
<Item Include="A.text"/>
<Item Include="Folder/A.text"/>
</Project>
如您所见,Item的include标签是相对路径,因此需要root路径才能打开该项目。 (项目文件路径)
我要处理的应用程序结构如下所示。
public class Project, IXmlSerializable
{
public ObservableCollection<Item> Items {get; set;} = new ObservableCollection<Item>();
public XmlSchema GetSchema() => null;
public void ReadXml(XmlReader reader)
{
// here would read ChildNode (Items)
}
public void WriteXml(XmlWriter writer)
{
...
}
}
public class Item, IXmlSerializable
{
public XmlSchema GetSchema() => null;
public void ReadXml(XmlReader reader)
{
...
}
public void WriteXml(XmlWriter writer)
{
...
}
}
读取代码如下所示。
using (StreamReader sr = new StreamReader(message.ProjectFullPath))
{
XmlSerializer xs = new XmlSerializer(typeof(ProjectStruct));
this.Projects.Add(xs.Deserialize(sr) as ProjectStruct);
}
如您所见,我创建了编写,读取派生IXmlSerializable的逻辑,以使用Serialize,DeSerialize函数。
当调用DeSerialize方法时,将调用ProjectStruct的ReadXml方法。而且ReadXml方法除了XmlReader之外没有其他参数,因此我无法将ProjectFullPath传递给ReadXML方法。
因此,我认为需要从XmlReader获取ProjectFullPath。
有人可以告诉我XmlReader的方法名称是什么获取当前文件路径吗?
如果您还有另一种解决此问题的方法,请告诉我。我不会迷路。
感谢阅读。
答案 0 :(得分:1)
除了接口定义的XmlReader
之外,您不能将其他任何内容传递给ReadXml
方法。
根据实例化Item
类的方式,可以使用定义路径的string
注入它:
public class Item(string path)
...
如果无法执行此操作,则应在XML数据中包含完整路径,然后从中读取完整路径。
最后的选择可能是从开始处理XML文件之前设置的静态属性Item
中获取它。
无论如何,您不能修改方法的签名。