解析xml文件小工具
最近因为开发需求,做了个解析xml文件的小工具,虽然不是什么难点,但有些功能也是第一次做,感觉挺有意思的,这里记录下。
涉及base64解码,xml遍历,拖拽获取文件路径,保存后打开文件地址并焦点文件等功能。


解析方式有两种:一种是点击文本框,弹出文件选择框,再选择文件。一种是直接把文件拖到文本框里,实现文件的解析。
下面直接贴代码======================================================================================
private void textBox1_Click(object sender, EventArgs e)
{
Analysis64Base();
}
private void Analysis64Base()
{
OpenFileDialog fileDialog = new OpenFileDialog();
fileDialog.Multiselect = false;
if (fileDialog.ShowDialog() == DialogResult.OK)
{
OpenAndSaveFile(fileDialog.FileName);
}
}
/// <summary>
/// 打开和保存xml
/// </summary>
private void OpenAndSaveFile(string openPath)
{
if (!openPath.Contains("xml")&& !openPath.Contains("XML"))
{
return;
}
try
{
XDocument xmlDocument = XDocument.Load(openPath);
GetElements(xmlDocument.Root.Elements());//解析
XElement rootElement = xmlDocument.Root;
IEnumerable<XElement> ie = rootElement.Descendants("RID").Where(x => x.Value.Contains("-"));
MessageBox.Show("解析完成,请选择保存位置");
SaveFileDialog saveFile = new SaveFileDialog();
string saveName = string.Empty;
if (ie != null)
{
saveName = ie.First().Value.Replace(":", "") + ".xml";//获取第一个RID内容,作为文件名(222102270376100011-2021022714:10:50)
saveName = saveName.Insert(saveName.Length - 10, "-");
}
saveFile.FileName = saveName;
if (saveFile.ShowDialog() == DialogResult.OK)
{
//xmlDocument.Save("C:\\Users\\admin\\Desktop\\新建文件夹 (2)\\1.xml");
xmlDocument.Save(saveFile.FileName);
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("Explorer.exe");//打开文件夹,并焦点文件
psi.Arguments = "/e,/select," + saveFile.FileName;
System.Diagnostics.Process.Start(psi);
//System.Diagnostics.Process.Start(Path.GetDirectoryName(saveFile.FileName));//仅打开文件夹
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "异常提醒");
}
}
/// <summary>
/// 递归实现解码
/// </summary>
/// <param name="xElements"></param>
public static void GetElements(IEnumerable<XElement> xElements)
{
foreach (XElement item in xElements)
{
if (item.HasElements)
{
GetElements(item.Elements());
}
else
{
byte[] c = Convert.FromBase64String(item.Value);
item.Value = Encoding.Default.GetString(c);
}
}
}
#region 实现拖拽解析文件
private void textBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Link;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void textBox1_DragDrop(object sender, DragEventArgs e)
{
string path = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
((TextBox)sender).Text = path;
OpenAndSaveFile(path);
((TextBox)sender).Text = "";
}
#endregion

浙公网安备 33010602011771号