using System.Xml.Linq;
using System.Collections.Generic;
using System.Linq;
using System;
using System.Text.RegularExpressions;
namespace XMLTest
{
class Program
{
public delegate void Tas();
public static XDocument xml = XDocument.Load(@"D:\Documents\Visual Studio 2013\Projects\PDF格式转换\XMLTest\" + "ColumnKeyWord.xml");
static void Main(string[] args)
{
string str = "20160202";
str = Convert.ToDateTime(str).ToString("yyyy-MM-dd");
str = str.Substring(0, 4) + str.Substring(4, 2) + str.Substring(6, 2);
GetEnglishName("TBL_CHN_T_MG_SHAREHOLD", "股东名称");
GetEnglishFieldByStandardChineseName("TBL_CHN_T_MG_SHAREHOLD", "股东名称");
GetStandardChineseFieldByEnglish("TBL_CHN_T_MG_SHAREHOLD", "ShareholderName");
}
/// <summary>
/// 根据excel字段获取中文规范字段
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="filedChineseName">传入的不规范名称</param>
/// <returns></returns>
public static string GetStandardFieldName(string tableName, string filedChineseName)
{
var Columns = from p in xml.Root.Descendants(tableName).Descendants("ColumnParam").Descendants("Value") select p;
string fieldStandardName = filedChineseName;
foreach (var item in Columns)
{
Regex regex = new Regex(item.Value);
if (regex.IsMatch(filedChineseName))
{
XElement x = item.Parent;
fieldStandardName = x.FirstAttribute.Value;
break;
}
}
return fieldStandardName;
}
/// <summary>
/// 根据excel字段获取英文规范字段
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="filedChineseName">传入的不规范名称</param>
/// <returns></returns>
public static string GetEnglishName(string tableName, string filedChineseName)
{
var columns = from p in xml.Root.Descendants(tableName).Descendants("ColumnParam").Descendants("Value") select p;
string englistField = "";
foreach (var item in columns)
{
Regex regex = new Regex(item.Value);
if (regex.IsMatch(filedChineseName))
{
XElement x = item.Parent;
englistField = x.Name.LocalName;
break;
}
}
return englistField;
}
/// <summary>
/// 根据标准中文名,也就是属性Name来寻找对应的英文字段名称
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="standardChineseName">标准中文名称</param>
/// <returns></returns>
public static string GetEnglishFieldByStandardChineseName(string tableName, string standardChineseName)
{
var columns = from p in xml.Root.Descendants(tableName).Descendants("ColumnParam").Elements() where p.Attribute("Name") != null select p;
string englistField = "";
foreach (var item in columns)
{
if (item.FirstAttribute.Value == standardChineseName)
{
englistField = item.Name.LocalName;
break;
}
}
return englistField;
}
/// <summary>
/// 根据标准英文字段字段中文字段
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="englishField">英文字段</param>
/// <returns>标准中文字段</returns>
public static string GetStandardChineseFieldByEnglish(string tableName, string englishField)
{
var columns = from p in xml.Root.Descendants(tableName).Descendants("ColumnParam").Elements() where p.Attribute("Name") != null select p;
string chineseField = "";
foreach (var item in columns)
{
if (item.Name.LocalName.ToUpper() == englishField.ToUpper())
{
chineseField = item.FirstAttribute.Value;
break;
}
}
return chineseField;
}
}
}
测试的xml文件 ColumnKeyWord.xml
<?xml version="1.0" encoding="utf-8" ?>
<!--限售情况表-->
<Root>
<TBL_CHN_I_MG_LOCKSHARES>
<ColumnParam>
<FullName Name="股东名称">
<Value>股东名称</Value>
<Value>名称</Value>
</FullName>
<Reason Name="限售原因">
<Value>限售原因</Value>
<Value>原因</Value>
</Reason>
<BeginningShares Name="期初持有数量">
<Value>期初限售股数</Value>
<Value>期初持有数量</Value>
</BeginningShares>
<ListedShares Name="本期解禁数量">
<Value>本期解除限售股数</Value>
<Value>本期解禁数量</Value>
</ListedShares>
<AddShares Name="本期增加限售股数">
<Value>本期增加限售股数</Value>
</AddShares>
<EndShares Name="期末持有限售股数">
<Value>期末限售股数</Value>
<Value>期末持有限售股数</Value>
</EndShares>
<ListedDate Name="本期解禁日期">
<Value>本期解禁日期</Value>
<Value>解除限售日期</Value>
</ListedDate>
</ColumnParam>
</TBL_CHN_I_MG_LOCKSHARES>
</Root>