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>
?
类似的东西?
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教程之一
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。