ASP.NET解析xml返回某节点属性的内容
2010-01-25 21:29
573 查看
test.xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
<R SecuCode="601600" Glossary="学IT网测试获取XML结果显示正常,。。。。。。。哈哈" />
<R SecuCode="600056" Glossary="测试第二个,。。。。。。。哈哈" />
</root>
下面xml解析操作类(扩展的):
/// <summary>
///
/// author:dodo
/// 网址:www.xueit.com
///
/// 读取XML类
/// </summary>
/// <typeparam name="T"></typeparam>
public class xmlHepler<T>
{
Hashtable table = new Hashtable();
T FileName;
T Root; //根节点
T RootAttName; //节点属性名称
T RootAttValue; //根节点属性值
T Field; //Xml字段
/// <summary>
/// XML文件路径
/// </summary>
/// <param name="val"></param>
public xmlHepler(T val)
{
FileName = val;
this.LoadXml(val.ToString());
}
/// <summary>
/// XML文件路径
/// </summary>
/// <param name="file"></param>
private void LoadXml(string file)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(file);
table.Add("xml", xdoc);
}
/// <summary>
/// 返回XML to DataTable
/// </summary>
/// <returns></returns>
public DataTable GetXmlToDataTable()
{
string[] SplitField = Field.ToString().Split(',');
//构造DataTable
DataTable dt = new DataTable();
DataColumn dc = null;
for (int i = 0; i < SplitField.Length; i )
{
dc = new DataColumn(SplitField[i]);
dt.Columns.Add(dc);
}
XmlDocument xdoc = (XmlDocument)table["xml"];
XmlNodeList xTable = xdoc.DocumentElement.SelectNodes(Root.ToString());
foreach (XmlNode xnode in xTable)
{
if (xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString()) //某一节点
{
//该节点下所有子节点
XmlNodeList xnlist = xnode.ChildNodes;
//子节点所有数据
for (int i = 0; i < xnlist.Count; i ) //for (int i = 0; i < xnode.ChildNodes.Count; i ) 这句是所有xml子节点数据
{
DataRow dr = dt.NewRow();
//绑定所需字段
for (int j = 0; j < SplitField.Length; j )
{
dr[SplitField[j]] = xnode.ChildNodes[i].Attributes[SplitField[j]].Value;
}
dt.Rows.Add(dr);
}
}
}
return dt;
}
/// <summary>
/// 返回xml 节点内容
/// </summary>
/// <returns></returns>
public string GetXmlToString()
{
string strText = string.Empty;
XmlDocument xdoc = (XmlDocument)table["xml"];
XmlNodeList xnList = xdoc.DocumentElement.SelectNodes(Root.ToString());
foreach (XmlNode xnode in xnList)
{
if (xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString())
{
strText = xnode.Attributes[Field.ToString()].InnerText;
break;
}
}
return strText;
}
#region 设置值
/// <summary>
/// 根节点
/// </summary>
public T xmlRoot
{
get { return Root; }
set { Root = value; }
}
/// <summary>
/// 节点属性字段名称
/// </summary>
public T xmlRootAttName
{
get { return RootAttName; }
set { RootAttName = value; }
}
/// <summary>
/// 节点属性字段值
/// </summary>
public T xmlRootAttValue
{
get { return RootAttValue; }
set { RootAttValue = value; }
}
/// <summary>
/// 子节点属性字段
/// </summary>
public T xmlSplitField
{
set { Field = value; }
}
#endregion
}
好,这些都准备好了,下面获取test.xml文件中SecuCode="601600"的Glossary值,新建一个文件test.aspx,在Page_Load()加入如下代码:
protected void Page_Load(object sender, EventArgs e)
{
string str = "";
xmlHepler<string> xml = new xmlHepler<string>(Server.MapPath("App_Data/test.xml"));
xml.xmlRoot = "R";
xml.xmlRootAttName = "SecuCode";
xml.xmlRootAttValue = "601600";
xml.xmlSplitField = "Glossary"; //要返回内容的字段
str = xml.GetXmlToString();
Response.Write(str);
}
<?xml version="1.0" encoding="utf-8" ?>
<root>
<R SecuCode="601600" Glossary="学IT网测试获取XML结果显示正常,。。。。。。。哈哈" />
<R SecuCode="600056" Glossary="测试第二个,。。。。。。。哈哈" />
</root>
下面xml解析操作类(扩展的):
/// <summary>
///
/// author:dodo
/// 网址:www.xueit.com
///
/// 读取XML类
/// </summary>
/// <typeparam name="T"></typeparam>
public class xmlHepler<T>
{
Hashtable table = new Hashtable();
T FileName;
T Root; //根节点
T RootAttName; //节点属性名称
T RootAttValue; //根节点属性值
T Field; //Xml字段
/// <summary>
/// XML文件路径
/// </summary>
/// <param name="val"></param>
public xmlHepler(T val)
{
FileName = val;
this.LoadXml(val.ToString());
}
/// <summary>
/// XML文件路径
/// </summary>
/// <param name="file"></param>
private void LoadXml(string file)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(file);
table.Add("xml", xdoc);
}
/// <summary>
/// 返回XML to DataTable
/// </summary>
/// <returns></returns>
public DataTable GetXmlToDataTable()
{
string[] SplitField = Field.ToString().Split(',');
//构造DataTable
DataTable dt = new DataTable();
DataColumn dc = null;
for (int i = 0; i < SplitField.Length; i )
{
dc = new DataColumn(SplitField[i]);
dt.Columns.Add(dc);
}
XmlDocument xdoc = (XmlDocument)table["xml"];
XmlNodeList xTable = xdoc.DocumentElement.SelectNodes(Root.ToString());
foreach (XmlNode xnode in xTable)
{
if (xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString()) //某一节点
{
//该节点下所有子节点
XmlNodeList xnlist = xnode.ChildNodes;
//子节点所有数据
for (int i = 0; i < xnlist.Count; i ) //for (int i = 0; i < xnode.ChildNodes.Count; i ) 这句是所有xml子节点数据
{
DataRow dr = dt.NewRow();
//绑定所需字段
for (int j = 0; j < SplitField.Length; j )
{
dr[SplitField[j]] = xnode.ChildNodes[i].Attributes[SplitField[j]].Value;
}
dt.Rows.Add(dr);
}
}
}
return dt;
}
/// <summary>
/// 返回xml 节点内容
/// </summary>
/// <returns></returns>
public string GetXmlToString()
{
string strText = string.Empty;
XmlDocument xdoc = (XmlDocument)table["xml"];
XmlNodeList xnList = xdoc.DocumentElement.SelectNodes(Root.ToString());
foreach (XmlNode xnode in xnList)
{
if (xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString())
{
strText = xnode.Attributes[Field.ToString()].InnerText;
break;
}
}
return strText;
}
#region 设置值
/// <summary>
/// 根节点
/// </summary>
public T xmlRoot
{
get { return Root; }
set { Root = value; }
}
/// <summary>
/// 节点属性字段名称
/// </summary>
public T xmlRootAttName
{
get { return RootAttName; }
set { RootAttName = value; }
}
/// <summary>
/// 节点属性字段值
/// </summary>
public T xmlRootAttValue
{
get { return RootAttValue; }
set { RootAttValue = value; }
}
/// <summary>
/// 子节点属性字段
/// </summary>
public T xmlSplitField
{
set { Field = value; }
}
#endregion
}
好,这些都准备好了,下面获取test.xml文件中SecuCode="601600"的Glossary值,新建一个文件test.aspx,在Page_Load()加入如下代码:
protected void Page_Load(object sender, EventArgs e)
{
string str = "";
xmlHepler<string> xml = new xmlHepler<string>(Server.MapPath("App_Data/test.xml"));
xml.xmlRoot = "R";
xml.xmlRootAttName = "SecuCode";
xml.xmlRootAttValue = "601600";
xml.xmlSplitField = "Glossary"; //要返回内容的字段
str = xml.GetXmlToString();
Response.Write(str);
}
相关文章推荐
- ASP.NET解析xml返回某节点属性的内容
- asp.net 读取xml节点下的内容
- 解析xml内容-Reply节点的属性2【华为】
- asp.net 读取xml节点下的内容
- ASP.NET读取XML某节点所有数据返回DataTable实例
- ASP.NET读取XML某节点所有数据返回DataTable实例--------------转载
- 在ASP.NET中XMLHTTP.RESPONSETEXT的返回值全部是HTML代码,怎样才能只返回我RESPONSE.WRITE的内容
- 在asp.net中xmlHttp.responseText的返回值全部是html代码,怎样才能只返回我Response.write的内容?
- ASP.NET读取XML某节点所有数据返回DataTable实例
- ASP.NET读取XML某节点返回DataTable实例
- ASP.NET----使用XmlDocument读写节点属性
- ASP.NET读取XML某节点所有数据返回DataTable的实例
- 解析xml内容-Reply节点的属性【华为】
- 解析xml内容-Reply节点的属性【中兴】
- ASP.NET读取XML某节点返回DataTable实例
- Dom4j解析XML文本,遍历指定节点下的节点内容和属性,并存入List<Map<String,Object>
- ASP.Net访问母版页(MasterPage)控件、属性、方法及母版页中调用内容页,获取用户自定义控件里面的子控件的方法
- ASP.NET技巧:请求网址并解析返回的html
- 写了C# ASP.NET WebService的XML解析网站接口程序收了200元辛苦费【加入软件项目源码交易群的好处】