XML读取,该如何解决
XML读取
请教这xml的结构设计的合理吗?
请教怎么读取所有Project 的id? 也就是读出Tcdsb和Ecsd
请教怎么读出所有Tcdsb下qa下Farm 也就是App02和App01
------解决方案--------------------
------解决方案--------------------
使用linq to xml,
http://blog.****.net/duanzi_peng/article/details/24018431
------解决方案--------------------
用Xpath直接取就行了
------解决方案--------------------
XmlDocument xd = new XmlDocument();
xd.LoadXml("test.xml");
XmlNodeList xnl = xd.SelectNodes("Server/Project");
foreach(XmlNode xn in xnl)
{
Console.write(xn.Attributes["id"].Value);
}
------解决方案--------------------
1.可以;
2.获取属性可以参考这样:
XmlDocument doc = new XmlDocument();
doc .Load(文件路径);
SelectNodes("/Server/Project/[@id]"); //这里要去看看xpath路径对没,太久没写忘记了属性是否如此写。
3.参考2 ,其实就是xpath路径问题"/Server/Project/qa/Farm";
------解决方案--------------------
读取XML文件
//获取XML中的数据
public static DataTable GetData(string path,string tableName)
{
//创建XmlDocument类的实例
XmlDocument xmldoc = new XmlDocument();
//调用XmlDocument类中的Load()方法加载XML文件
xmldoc.Load(path);
//创建DataTable类型的变量dt
DataTable dt = new DataTable();
///获取根节点
XmlNode rootNode = xmldoc.SelectSingleNode("/" + tableName + "s");
//判断节点及其子节点是否为空,为空将返空值
if(rootNode == null) return null;
if(rootNode.ChildNodes.Count <= 0) return null;
///创建保存记录的数据列
foreach(XmlAttribute attr in rootNode.ChildNodes[0].Attributes)
{
dt.Columns.Add(new DataColumn(attr.Name,typeof(string)));
}
///创新获取数据节点的XPath
string xmlPath = "/" + tableName + "s/" + tableName;
<?xml version="1.0" encoding="GB2312"?>
<Server>
<Project id="Tcdsb">
<Qa>
<Farm id="App01">
<Username>cec\QASetup</Username>
<Password>@$etup</Password>
<address>APP01</address>
</Farm>
<Farm id="App02">
<Username>cec\QASetup</Username>
<Password>@$etup</Password>
<address>APP01</address>
</Farm>
</Qa>
</Project>
<Project id="Ecsd">
<Qa>
<Farm id="App01">
<Username>cec\QASetup</Username>
<Password>@$etup</Password>
<address>APP01</address>
</Farm>
<Farm id="App02">
<Username>cec\QASetup</Username>
<Password>@$etup</Password>
<address>APP01</address>
</Farm>
</Qa>
</Project>
</Server>
请教这xml的结构设计的合理吗?
请教怎么读取所有Project 的id? 也就是读出Tcdsb和Ecsd
请教怎么读出所有Tcdsb下qa下Farm 也就是App02和App01
------解决方案--------------------
string path = @"C:\1.xml";
XDocument doc = XDocument.Load(path);
var ele = doc.Element("Server").Elements().Where((XElement x) => x.Name.LocalName == "Project");
foreach (var v in ele)
{
Console.WriteLine(v.Attribute("id").Value); //Project id
var ele1 = v.Element("Qa").Elements().Where((XElement x) => x.Name.LocalName == "Farm").Select((XElement x) => x.Attribute("id").Value);
foreach (var v1 in ele1)
{
Console.WriteLine(v1); //Tcdsb下qa下Farm
}
}
------解决方案--------------------
使用linq to xml,
http://blog.****.net/duanzi_peng/article/details/24018431
------解决方案--------------------
用Xpath直接取就行了
------解决方案--------------------
XmlDocument xd = new XmlDocument();
xd.LoadXml("test.xml");
XmlNodeList xnl = xd.SelectNodes("Server/Project");
foreach(XmlNode xn in xnl)
{
Console.write(xn.Attributes["id"].Value);
}
------解决方案--------------------
1.可以;
2.获取属性可以参考这样:
XmlDocument doc = new XmlDocument();
doc .Load(文件路径);
SelectNodes("/Server/Project/[@id]"); //这里要去看看xpath路径对没,太久没写忘记了属性是否如此写。
3.参考2 ,其实就是xpath路径问题"/Server/Project/qa/Farm";
------解决方案--------------------
读取XML文件
//获取XML中的数据
public static DataTable GetData(string path,string tableName)
{
//创建XmlDocument类的实例
XmlDocument xmldoc = new XmlDocument();
//调用XmlDocument类中的Load()方法加载XML文件
xmldoc.Load(path);
//创建DataTable类型的变量dt
DataTable dt = new DataTable();
///获取根节点
XmlNode rootNode = xmldoc.SelectSingleNode("/" + tableName + "s");
//判断节点及其子节点是否为空,为空将返空值
if(rootNode == null) return null;
if(rootNode.ChildNodes.Count <= 0) return null;
///创建保存记录的数据列
foreach(XmlAttribute attr in rootNode.ChildNodes[0].Attributes)
{
dt.Columns.Add(new DataColumn(attr.Name,typeof(string)));
}
///创新获取数据节点的XPath
string xmlPath = "/" + tableName + "s/" + tableName;