【问题标题】:C# xdocument read from element and put the value into stringC# xdocument 从元素读取并将值放入字符串
【发布时间】:2016-04-26 13:12:02
【问题描述】:

我有问题。 这是我第一次在 c# 中使用 xml 文档

我有一个这样的 XML 文档:

  <root>
    <GLOBAL>
        <copy>@srcdir@c:\test1\test.txt, @destdir@C:\test1\test.txt</copy>
    </GLOBAL>
  </root>

现在我想在 c# 中创建一个加载 xml 的应用程序(使用 xdocument 完成),您选择了一个选项(在本例中为全局),然后它获取复制元素,并复制此元素中列出的文件。

我有复制功能,加载 xml 已经完成,但是在变量中获取 srcdir 和 destdir 是一个问题。

有什么可以帮助我走上正轨的吗?

亲切的问候,

【问题讨论】:

    标签: c# copy linq-to-xml


    【解决方案1】:

    使用LinqXml 你可以做到这一点。

        XDocument doc = XDocument.Load(filepath);       
        var copyitems = doc.Descendants("GLOBAL")   // Read all descendants     
            .Select(s=> 
                {
                    var splits = s.Value.Split(new string[] {"@srcdir@", "@destdir@"}, StringSplitOptions.RemoveEmptyEntries); // split the string to separate source and destination.
                    return new { Source = splits[0].Replace(",",""), Destination = splits[1].Replace(",","")};
                })
            .ToList();
    

    现在您可以将源和目标读取为...

        foreach(var copy in copyitems)
        {
            Console.WriteLine("{0}- {1}", copy.Source, copy.Destination);
        } 
    

    输出:

    c:\test1\test.txt - C:\test1\test.txt
    

    查看Demo

    【讨论】:

    • 感谢您的帮助。它在您的演示中工作得非常好,但是当我尝试这个解决方案时,我得到:索引超出了数组的范围。有什么想法吗?
    • 找到问题了,我想我现在可以继续了。谢谢,如果我再次卡住会报告
    • 太好了,很高兴这个解决方案对您有所帮助。
    • 嗨,你能再帮帮我吗?我希望能够在一个死者中拥有更多的复制行,我该怎么做?每次我添加一个额外的行时,我都会收到此错误:附加信息:索引超出了数组的范围。
    • 像这样:@SRCDIR@\test\test1.txt ,@KRQDIR@\test1\@SRCDIR@\test\test2。 txt ,@KRQDIR@\test1\
    【解决方案2】:

    也许你应该尝试做这样的事情:

    <copy src="c:\test1\test.txt" dest="C:\test1\test.txt"/>
    

    然后获取属性。

    【讨论】:

    • 是的,这样会更容易,但我必须编辑大约 4500 行代码(xml 已经存在)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多