簡體   English   中英

使用C#動態地將XElements添加到XAttribute

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM