XmlReader获得当前文件路径的方法名称是什么?

问题描述 投票:0回答:1

我的应用程序将内容保存到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的方法名称是什么获取当前文件路径吗?

如果您还有其他解决此问题的方法,请告诉我。我不会迷路。

感谢阅读。

c# wpf xmlreader
1个回答
0
投票

您不能将接口定义的XmlReader以外的任何内容传递给ReadXml方法。

取决于您实例化Item类的方式,您可以使用定义路径的string注入它:

public class Item(string path)
...

如果无法执行此操作,则应在XML数据中包含完整路径,然后从那里读取它。

最后的选择可能是从开始处理XML文件之前设置的Item静态属性中获取它。

无论如何,您不能修改方法的签名。

© www.soinside.com 2019 - 2024. All rights reserved.