首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我有一个具有多个siteserver元素的xml,我希望将所有siteserver元素分组到Siteservers父节点

我有一个具有多个siteserver元素的xml,我希望将所有siteserver元素分组到Siteservers父节点
EN

Stack Overflow用户
提问于 2018-09-17 19:02:07
回答 2查看 22关注 0票数 0

目前,XML是这样生成的:

代码语言:javascript
运行
复制
<Sites>
    <SiteServer>
      <ID>4</ID>
      <SiteID>4</SiteID>
      <ServerName>New server</ServerName>
      <IPAddress>1022216522</IPAddress>
      <PDPServer>true</PDPServer>
      <bFTPS>false</bFTPS>
    </SiteServer>
    <SiteServer>
      <ID>4</ID>
      <SiteID>4</SiteID>
      <ServerName>New server</ServerName>
      <IPAddress>1022216522</IPAddress>
      <PDPServer>true</PDPServer>
      <bFTPS>false</bFTPS>
    </SiteServer>
</Sites>

我需要在siteserver名称siteservers之前添加一个父节点。将所有站点服务器分组到站点服务器。

代码语言:javascript
运行
复制
<Sites>
    <SiteServers>
    <SiteServer>
      <ID>4</ID>
      <SiteID>4</SiteID>
      <ServerName>New server</ServerName>
      <IPAddress>1022216522</IPAddress>
      <PDPServer>true</PDPServer>
      <bFTPS>false</bFTPS>
    </SiteServer>
    <SiteServer>
      <ID>4</ID>
      <SiteID>4</SiteID>
      <ServerName>New server</ServerName>
      <IPAddress>1022216522</IPAddress>
      <PDPServer>true</PDPServer>
      <bFTPS>false</bFTPS>
    </SiteServer>
    </SiteServers>
</Sites>

我尝试添加子节点和分组依据,但不起作用。

代码语言:javascript
运行
复制
var xml = XDocument.Load(@"C:\Users\rbarnwal\source\repos\testXML\testXML\ExportXml2.xml");
var result = new XElement(xml.Root.Name, xml.Root.Elements().GroupBy(x => x.Name).Select(x =>
    new XElement("Parent", new XAttribute("name", x.Key))));

var result2 = new XElement(xml.Root.Name, xml.Root.Attributes().ToArray(),
    xml.Root.Elements().GroupBy(x => x.Element("SiteServer").Value.Trim()).Select(x =>
        new XElement("SiteServers"))
);
EN

回答 2

Stack Overflow用户

发布于 2018-09-17 19:40:34

希望这能有所帮助。从我的XML日志中,我习惯于从里到外构建xml文件。

代码语言:javascript
运行
复制
 var doc = new XDocument();
                var root = new XElement("Sites"); // Sites node
                var siteServers = new XElement("SiteServers"); // SiteServers node
                List<XElement> siteServerList = new List<XElement>(); // list of SiteServer nodes
                //I am not sure, where you are getting ID, siteID etc., so I will pretend like you are adding them by foreach, like from list, or something.
                foreach( var site in sites)
                {
                    XElement siteServer = new XElement("SiteServer");
                    siteServer.Add(new XElement("ID", site.ID));
                    siteServer.Add(new XElement("SiteID", site.siteID));
                    // etc...

                    siteServerList.Add(siteServer);

                }
                foreach(var siteServer in siteServerList)
                {
                    siteServers.Add(siteServer);
                }
                root.Add(siteServers);
                doc.Add(root);
                doc.Save("YourPath");
票数 0
EN

Stack Overflow用户

发布于 2018-09-17 19:44:24

并不简单。尝试下面的代码:

代码语言:javascript
运行
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            XElement sites = doc.Descendants("Sites").FirstOrDefault();

            var groups = doc.Descendants("SiteServer").GroupBy(x => (int)x.Element("ID")).ToList();

            XElement newSites = new XElement("Sites");
            foreach(var group in groups)
            {
                XElement newSiteServers = new XElement("SiteServers", group);
                newSites.Add(newSiteServers);
            }
            sites.ReplaceWith(newSites);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52366265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档