streamreader读出xml文件的行

时间:2011-06-14 06:35:38

标签: c# wpf xml

我想将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>要读出来吗?

5 个答案:

答案 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。

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

答案 2 :(得分:0)

您可能希望查看XML ParsingEasy 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。