streamreader读取xml文件的行

本文关键字:文件 xml 读取 streamreader | 更新日期: 2023-09-27 17:59:09

我想将一个xml文件读取到文本块中,用户可以在文本块中编辑此文本,并将追加更改应用回xml文件。。。我现在被卡住了。这就是我迄今为止所做的:

    private void Editbuildstreams_Click(object sender, RoutedEventArgs e)
    {
        BuildstreamTextblock.Visibility = Visibility.Visible;
        using (StreamReader srr = new StreamReader("initial.xml"))
        {
            string line;
            while ((line = srr.ReadLine()) != null)
            {
                BuildstreamTextblock.Text = line;
            }
        }
    }

这是xml文件的结构:

<xml>
   <email>
..
   </email>
   <buildstream1>
      <path value="apple"/>
   </buildstream1>
   <buildstream2>
      <path value="pear"/>
      <path value="bananas"/>
   </buildstream2>
</xml>

问题是:

如何读取xml文件的行数?

我只对获取xml文件的某些部分感兴趣。我如何只获取<buildstream1>&是否要读出<buildstream2>

streamreader读取xml文件的行

类似的东西?

var originalDocument = XDocument.Load(fileName);
var originalElement = originalDocument.XPathSelectElement("xml/buildstream1");
textBox.Text = originalElement.ToString();
// do changes in the text box
var newDocument = XDocument.Parse(textBox.Text);
var newElement = newDocument.Elements().Single();
// insert edited element
originalElement.AddAfterSelf(newElement);
// remove original element
originalElement.Remove();
originalDocument.Save(fileName);
// or
var resultXml = originalDocument.ToString();

我建议不要像读取文本文件一样读取它,而是使用数据适配器。只要xml文件是有效的xml,它就可以很好地工作。

然后,您可以根据所需的选项使用数据绑定的文本框、数据网格、组合框或各种其他工具——此外,您不必担心用户扰乱xml的结构或编写自己的逻辑来进行筛选。

下面是一些使用与我大致相同方法的代码示例。谷歌搜索会发现更多的猎犬。

http://www.codeproject.com/KB/cpp/dataset.aspx

您可能需要了解XML解析和简易XML解析

希望这对有帮助

看一看使用XPathReader(这是一篇很好的文章,毫无疑问,你会想完整阅读)。示例:

<xml>
   <email>
..
   </email>
   <buildstream1>
      <path value="apple"/>
   </buildstream1>
   <buildstream2>
      <path value="pear"/>
      <path value="bananas"/>
   </buildstream2>
</xml>

示例

using System; 
using System.Xml;
using System.Xml.XPath;
using GotDotNet.XPath;
public class Test
{
    public static void Main(string[] args)
    {
        try
        {
            XPathReader xpr  = new XPathReader("input.xml", "//*/path@value");
            while (xpr.ReadUntilMatch())
                Console.WriteLine(xpr.ReadString());
            Console.ReadLine();
        }
        catch(XPathReaderException xpre)
        { Console.WriteLine("XPath Error: " + xpre); }
        catch(XmlException xe)
        { Console.WriteLine("XML Parsing Error: " + xe); }
        catch(IOException ioe)
        { Console.WriteLine("File I/O Error: " + ioe); }
    }
}

将打印

apple
pear
bananas

谷歌搜索众多XPath教程之一

执行此操作的一种方法是读取字符串并加载到XmlDcument中。这样你就可以很容易地找到任何特定的元素。
private void Editbuildstreams_Click(object sender, RoutedEventArgs e)
{
    BuildstreamTextblock.Visibility = Visibility.Visible;
    XmlDocument doc = new XmlDocument();
    using (XmlTextReader reader = new XmlTextReader("initial.xml"))
    {
       reader.Read(); 
       doc.Load(reader);
       StringBuilder line = new StringBuilder();
       line.apend (doc.doc.GetElementsByTagName("buildstream1")[0].outerXml;
       BuildstreamTextblock.Text = line;
    }
}

类似地,在操作它们之后,您可以通过使用XmlDocument对象再次将更改分配回原始xml。