簡體   English   中英

反序列化XML文件中的注釋

[英]Deserializing the comments in XML file

我試圖反序列化以下示例XML文件。我已經為此XML文件創建了模式。借助模式,我可以將XML反序列化為對象。

但我的問題是我在我的XML文件上有一個XML注釋(例如: <!----Test--> ).Deserializer沒有讀取我使用模式創建的XML到對象的注釋。

而且我還注意到注釋節點的架構中沒有可用的條目。

我如何閱讀從XML文件到對象的注釋?

對象序列化的目的是保存對象的狀態,並在以后恢復。 對象字段映射到XML元素和屬性,反之亦然。 XMLSerializer不會將任何內容映射到注釋,反之亦然,因此您無法將注釋反序列化為對象中的任何內容。

但是,如果您使用傳遞給Deserialize ()方法的XmlReader(如@Amigable所述),則可以使用該XmlReader單獨遍歷樹以查找注釋。

不幸的是,這使得將注釋連接到反序列化成員變得更加困難,但也許您可以使用反序列化節點事件處理程序來幫助解決這個問題。

更新:有關使用帶反序列化的XmlReader的一些細節:

您將代碼列為:

XmlSerializer objSer = new XmlSerializer(typeof(CustomSchema));
StreamReader srmRdr = new StreamReader("Test.XML");
objForm = (CustomSchema)objSer.Deserialize(srmRdr);

我對.NETCF或WM一無所知。 (我對XmlSerializer一無所知,但我只是看文檔 。)不過,這就是我上面要描述的內容。

我以為你可以使用XmlReader進行Deserialize()然后重新使用它,但顯然它只是向前,因此無法重置到開頭。 因此,在反序列化后,使用XmlReader重新打開“Test.XML”:

XmlReader xmlRdr = XmlReader.Create("Test.XML");

然后使用此處顯示的解析代碼

    // Parse the file
    while (xmlRdr.Read())
    {
        switch (xmlRdr.NodeType)
        {
            case XmlNodeType.Element:
                // You may need to capture the last element to provide a context
                // for any comments you come across... so copy xmlRdr.Name, etc.
                break;
            case XmlNodeType.Comment:
                // Do something with xmlRdr.value

它沒有說你正在使用哪種編程語言,但基於這個例子 ,這與你想要做的完全相反,你是否可以插入XmlReader,就像插入XmlWriter作為該問題的接受答案一樣?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM