【发布时间】:2020-10-17 23:54:26
【问题描述】:
我有两个输入 XML 文件,这是第一个:
<?xml version="1.0" encoding="utf-8"?>
<ipaddresses>
<ip>192.168.45.12</ip>
<ip>192.168.45.33</ip>
<ip>192.168.45.54</ip>
<ip>192.168.45.95</ip>
</ipaddresses>
第二个:
<ipaddresses>
<ip>192.168.15.12</ip>
<ip>192.168.25.13</ip>
<ip>192.168.35.14</ip>
<ip>192.168.45.15</ip>
</ipaddresses>
我想要的输出是:
<ipaddresses>
<ip>192.168.15.12</ip>
<ip>192.168.25.33</ip>
<ip>192.168.35.54</ip>
<ip>192.168.45.95</ip>
</ipaddresses>
简而言之,我想用第二个输入文件的第三个八位字节替换第一个输入文件的第三个八位位组。
目前我写的代码是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Xml.Linq;
namespace IPModifier
{
class Program
{
static void Main(string[] args)
{
XDocument ipAddressesToModify = XDocument.Load(args[0]);
XDocument sourceIPs = XDocument.Load(args[1]);
List<XElement> ipAddresses = new List<XElement>();
List<XElement> sourceIPAddresses = new List<XElement>();
List<byte> utilizedOctets = new List<byte>();
List<byte[]> ips = new List<byte[]>();
IEnumerable<XElement> allIPs = from ipAddress in ipAddressesToModify.Root.Elements()
select ipAddress;
foreach (XElement ipAddress in allIPs)
{
ipAddresses.Add(ipAddress);
Console.WriteLine(ipAddress.Value);
}
IEnumerable<byte> ipThirdOctets = from ipOctet in ipAddresses
let byteOctetsThree = IPAddress.Parse(ipOctet.Value).GetAddressBytes()[2]
select byteOctetsThree;
foreach (byte octetOfIP in ipThirdOctets)
{
Console.WriteLine(octetOfIP.ToString());
}
IEnumerable<XElement> allsourceIP = from source in sourceIPs.Root.Elements()
select source;
foreach (XElement sourceIP in allsourceIP)
{
sourceIPAddresses.Add(sourceIP);
Console.WriteLine(sourceIP.Value);
}
IEnumerable<byte> sourceOctets = from sourceIP in allsourceIP
let octets = IPAddress.Parse(sourceIP.Value).GetAddressBytes()[2]
select octets;
foreach (byte octet in sourceOctets)
{
utilizedOctets.Add(octet);
Console.WriteLine(octet);
}
foreach (XElement ipAdd in ipAddresses)
{
byte[] ip = IPAddress.Parse(ipAdd.Value).GetAddressBytes();
ips.Add(ip);
}
foreach (byte[] ipToModify in ips)
{
foreach (byte oct in utilizedOctets)
{
ipToModify[2] = oct;
IPAddress newIP = new IPAddress(ipToModify).MapToIPv4();
Console.WriteLine(newIP.ToString());
}
}
}
}
}
我尝试使用嵌套循环来解决这个问题,但是我得到了错误的输出,将第二个输入 XML 文件中的最后一个八位字节替换为“45”。问题是发生了太多的迭代。如果有人可以提供帮助,将不胜感激,我是 C# 的新手,主要来自 Java 经验。
【问题讨论】:
标签: c# xml ip-address