c# – 将元素动态添加到XML文件
我正在使用这个代码制作一个
XML文件,在这里我创建一个对象,每次调用该方法时都会写入一个XML文件:
public static void TileMapCapabilities(string title,TilePicker picker) { var dbInfo = picker.GetCapabilitiesInfo(); TileMapObject tmo = new TileMapObject() { Title = title,Abstract = "",KeywordList = new KeywordList() {FirstLayer = ""},SRS = "OSGEO:41001",Profile = "local",Format = "image/png",BoundingBox = dbInfo.eBoundingBox,MapSize = dbInfo.mapSize,CellSize = dbInfo.cellSize,MaxLevel = dbInfo.level,Location = dbInfo.location // Not sure if this should be here. Could be practical in scenarios where the tile server is hosted locally. };} 它的工作正常,可能看起来像这样: <?xml version="1.0" encoding="utf-8"?> <TileMapServicesObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <TileMapService> <Title>EivaTMS</Title> <Abstract>Something clever about this service</Abstract> <TileMaps> <TileMap> <Title>kraken.db</Title> <href>10.10.100.200/kraken.db?request=getcapabilities</href> <Profile>global-mercator</Profile> <SRS>OSGEO:41001</SRS> </TileMap> </TileMaps> </TileMapService> </TileMapServicesObject> 现在,我想做的是创建一个描述上面提到的层的XML文件.换句话说,我想要一个XML文件,其中描述了我上面提到的每个XML文件. 我已经设法做了一些工作,如果我在代码中编写代码,它将如下所示: public static void TileMapServicesCapabilities(int listBoxCount) { TileMapServicesObject tmso = new TileMapServicesObject() { TileMapService = new TileMapService() { Title = "EivaTMS",Abstract = "Something clever about this service",TileMaps = new List<TileMap> { new TileMap { Title = "title1",href = "http://title1/?request=getcapabilities",Profile = "global-mercator",SRS = "OSGEO:41001"},new TileMap { Title = "title2",href = "http://title2/?request=getcapabilities",new TileMap { Title = "title3",href = "http://title3/?request=getcapabilities",SRS = "OSGEO:41001"} } } };} 哪个产生这个输出: <?xml version="1.0" encoding="utf-8"?> <TileMapServicesObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <TileMapService> <Title>EivaTMS</Title> <Abstract>Something clever about this service</Abstract> <TileMaps> <TileMap> <Title>title1</Title> <href>http://title1/?request=getcapabilities</href> <Profile>global-mercator</Profile> <SRS>OSGEO:41001</SRS> </TileMap> <TileMap> <Title>title2</Title> <href>http://title2/?request=getcapabilities</href> <Profile>global-mercator</Profile> <SRS>OSGEO:41001</SRS> </TileMap> <TileMap> <Title>title3</Title> <href>http://title3/?request=getcapabilities</href> <Profile>global-mercator</Profile> <SRS>OSGEO:41001</SRS> </TileMap> </TileMaps> </TileMapService> </TileMapServicesObject> 现在,我想做的是动态创建和添加元素.这意味着对于我通过第一个方法TileMapCapabilities创建的每个XML文件,我想创建一个对象并将其添加到TileMapServicesObject.可能还值得一提的是,类看起来包含正在创建的对象中的信息: public class TileMapServicesObject { public TileMapService TileMapService { get; set; } } public class TileMapService { public string Title { get; set; } public string Abstract { get; set; } public List<TileMap> TileMaps { get; set; } } public class TileMap { public string Title { get; set; } public string href { get; set; } public string Profile { get; set; } public string SRS { get; set; } } 我一直在尝试一个foreach循环,为我添加到服务中的每个TileMap创建一个TileMap对象,但是这为每次迭代创建了一个新的TileMapServicesObject,而不是包含所有对象的单个文件. 有什么提示我如何处理这个问题?如果我的请求在当前形式太模糊,请让我知道. 编辑:结果只是盯着它,足够长的时间固定它! 以下是更新的代码: public static void TileMapServicesCapabilities() { TileMapServicesObject tmso = new TileMapServicesObject(); List<string> pathList = new List<string>(); pathList = Directory.GetFiles(path + @"Tilemaps").ToList(); List<TileMap> tmList = new List<TileMap>(); TileMap tm = new TileMap(); string title = ""; string profile = ""; string srs = ""; foreach (var p in pathList) { var xRead = XDocument.Load(p); var xd = (from el in xRead.Descendants("TileMapObject") select new { Title = el.Element("Title").Value,Profile = el.Element("Profile").Value,SRS = el.Element("SRS").Value }).SingleOrDefault(); title = xd.Title; profile = xd.Profile; srs = xd.SRS; tm = new TileMap() { Title = title,Profile = profile,SRS = srs,href = "http://10.10.100.200/" + title + "?request=getcapabilities" }; tmList.Add(tm); } tmso = new TileMapServicesObject() { TileMapService = new TileMapService() { Title = "EivaTMS",TileMaps = tmList } }; 这给了我这个漂亮的XML文件: <?xml version="1.0" encoding="utf-8"?> <TileMapServicesObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <TileMapService> <Title>EivaTMS</Title> <Abstract>Something clever about this service</Abstract> <TileMaps> <TileMap> <Title>title1</Title> <href>http://title1?request=getcapabilities</href> <Profile>local</Profile> <SRS>OSGEO:41001</SRS> </TileMap> <TileMap> <Title>title2</Title> <href>http://title2?request=getcapabilities</href> <Profile>local</Profile> <SRS>OSGEO:41001</SRS> </TileMap> <TileMap> <Title>title3</Title> <href>http://title3?request=getcapabilities</href> <Profile>local</Profile> <SRS>OSGEO:41001</SRS> </TileMap> <TileMap> <Title>title4</Title> <href>http://title4?request=getcapabilities</href> <Profile>local</Profile> <SRS>OSGEO:41001</SRS> </TileMap> </TileMaps> </TileMapService> </TileMapServicesObject> 解决方法
好的,我设法解决了这个几个小时,盯着它!
原来我只能做一个foreach(),我将遍历所有要读取的文件,创建一个TileMap对象并将其添加到List中,然后在foreach()之后写入XML.我用我的新代码更新了OP. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- oracle – SQL Loader错误:“可变长度字段超过最大长度.”
- ajax post提交数据,prompt aborted by user错误
- actionscript-3 – 如何在NetStream中打开和关闭H264?
- ruby-on-rails – Rails 4引导设置资产
- 2017年3月编程语言排行榜:Swift挺进前十
- ruby-on-rails – 带有“外键”的Mongoid
- FreeType库和“对FT_Init_FreeType的未定义引用”
- 4.4 函数的输入输出inout参数解析 [Swift原创教程]
- 利用Jsonp实现跨域请求,spring MVC+JQuery
- c – 将一个const引用参数初始化为默认参数会导致悬空引用吗