【问题标题】:Reading xml file from specific line从特定行读取 xml 文件
【发布时间】:2021-08-03 09:52:26
【问题描述】:

这是我的情况:

public static string ReadFromLine(int lineNumber, params string[] searchedAttribute)
{
    //XmlTextReader reader = new XmlTextReader(xmlFilePath);
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.LineNumberOffset = lineNumber;
    settings.DtdProcessing = DtdProcessing.Parse;

    FileStream fs = new FileStream(xmlFilePath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read);
    XmlReader reader = XmlReader.Create(fs, settings);

    while (reader.Read())
    {
        if (reader.NodeType == XmlNodeType.Element && reader.Name == searchedAttribute[0] || reader.Name == searchedAttribute[1])
        {
            if(reader.Name == searchedAttribute[0])
                reader.MoveToAttribute(searchedAttribute[0]);
            else
                reader.MoveToAttribute(searchedAttribute[1]);

            string currentAttributeValue = reader.ReadElementString();
            return currentAttributeValue;
        }
    }
    return "notFound";
}

在我想从变量“linenumber”中传递的行中读取 xml 文件的方法中。

不幸的是,尽管根据文档使用了我的设置,但我的 阅读器每次都从第 1 行开始

欣赏如何解决它或其他解决方案的任何想法。

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    不幸的是,尽管根据文档使用了我的设置...

    这里一定有什么误解。一个XmlReader总是从传递的StreamTextReader等的当前位置开始。

    LineNumberOffset 所做的只是调整报告的行号(例如,如果在处理过程中出现任何错误)。

    如果您将FileStream 嵌入到StreamReader 中,读取lineNumber 行,然后创建一个XmlReader 在当前位置传递StreamReader,则可能的(但不太推荐)解决方案到XmlReader.Create(TextReader,XmlReaderSettings)重载:

    using var stream = File.OpenRead(xmlFilePath);
    
    // skipping lineNumber of lines
    var streamReader = new StreamReader(stream);
    for (int i = 0; i < lineNumber; i++)
        streamReader.ReadLine();
    
    XmlReader xmlReader = XmlReader.Create(sreamReader, settings);
    

    但实际上,更可取(且可避免格式设置)的解决方案是将整个 XML 读入XDocument,然后通过LINQ to XML 在内容中导航。

    【讨论】:

    • 谢谢,不知道怎么写,能不能发一段代码?
    • 当 StreamReader 读取“lineNumber”行时,我如何将它传递给 XmlReader,它将从 StreamReader 结束的行开始?
    猜你喜欢
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多