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

What the method name of the XmlReader getting the current file path?

我的应用程序将内容保存到 XML 文件或从 XML 文件读取内容。 内容是项目结构,XML文件可以随处存在。

例如,我的应用程序使用的 XML 文件的结构如下所示。

<Project version="1">
    <Item Include="A.text"/>
    <Item Include="Folder/A.text"/>
</Project>

如您所见,Item的include标签是相对路径,因此需要根路径才能打开item。 (项目文件路径)

我要处理的申请结构如下所示。

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 获取当前文件路径的方法名是什么?

如果您有其他方法可以解决此问题,请告诉我。我不迷恋我的方式。

感谢阅读。

除了接口定义的 XmlReader 之外,您不能将任何其他内容传递给 ReadXml 方法。

根据您实例化 Item class 的方式,您可以使用定义路径的 string 注入它:

public class Item(string path)
...

如果您不能这样做,您应该在 XML 数据中包含完整路径并从那里读取它。

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

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