[英]Dynamically adding XElements to XAttribute using C#
<?xml version="1.0" encoding="ISO-8859-1"?>
<servers>
<server serverid="server1" asset="Sample" >
<port portid ="port1" asset="Sample" ></port>
<port portid ="port2" asset="Sample" ></port>
</server>
<server serverid="server2" asset="Sample" >
<port portid ="port1" asset="Sample" ></port>
<port portid ="port2" asset="Sample" ></port>
<port portid ="port3" asset="Sample" ></port>
<port portid ="port4" asset="Sample" ></port>
</server>
<server serverid="server1" asset="Sample" >
<port portid ="port1" asset="Sample" ></port>
<port portid ="port2" asset="Sample" ></port>
<port portid ="port3" asset="Sample" ></port>
</server>
</servers>
我正在尝试将Server XElements和端口XElements添加到现有的XML DOC中。 我尝试使用for&forEach将端口Xelements添加到服务器Xelement。 这里的技巧是端口XElemnts的数量因服务器而异。 请帮我解决这个问题。 以下是示例代码,我试过了。
var xdoc = XDocument.Load("C:\\sample.xml");
var server = new XElement("server",
new XAttribute("serverid", ServerId),
new XAttribute("name", ServerName),
(foreach(var sample in test)
{
new XElement("port",
new XAttribute("asset", PortName),
new XAttribute("portid", PortId));
});
奇怪的是,你没有在循环中使用sample
变量。 但是,如果要为test
集合中的每个项添加新的port
元素,则应将每个项目投影到XElement
并返回这些元素的集合:
var fileName = @"C:\sample.xml";
var xdoc = XDocument.Load(fileName);
var server =
new XElement("server",
new XAttribute("serverid", ServerId),
new XAttribute("name", ServerName),
test.Select(sample =>
new XElement("port",
new XAttribute("asset", PortName),
new XAttribute("portid", PortId)
))
);
请记住, foreach
循环不会返回任何内容。 但是您需要为正在创建的服务器元素提供价值。
xdoc.Root.Add(server);
xdoc.Save(fileName);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.