我想将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>
&amp; <buildstream2>
要读出来吗?
答案 0 :(得分:3)
这样的东西?
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();
答案 1 :(得分:1)
我建议不要尝试像文本文件一样阅读它,而是使用数据适配器。只要xml文件是有效的xml,它就能很好地工作。
然后,您可以根据所需的选项使用数据绑定文本框,数据网格,组合框或各种其他工具 - 此外,您不必担心用户搞乱xml的结构或编写自己的逻辑来过滤。 / p>
以下是一些使用大致相同方法的代码示例。谷歌搜索将更多地揭示hundres。
答案 2 :(得分:0)
您可能希望查看XML Parsing和Easy XML Parsing
希望这有助于
答案 3 :(得分:0)
看一下使用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
Google获取众多XPath教程之一
答案 4 :(得分:0)
执行此操作的一种方法是读取字符串并加载到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。