如何獲取XML文件里配置的信息


假設我們現在配置了一個這樣的XML文件,文件名為ReportConfig.xml

View Code
 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <Reports>
 3   <Report name="JZ_FSJZW" title="建設征地集鎮房屋附屬建築物調查表" rowPerPage="34">
 4     <Head>
 5       <Field name="A1" warpText="調查表標題" valueIndex ="0"/>
 6       <Field name="C2" warpText="設計階段" valueIndex ="1"/>
 7     </Head>
 8     <Data startWriteDataRowIndex="7">
 9       <Field name="A" colIndex="1" valueIndex="1" warpText="序號" />
10       <Field name="B" colIndex="2" valueIndex="2" warpText="項目名稱" />
11     </Data>
12     <Sign rowHeight="20" pzxzfl="NCFW_FSJZW_LXGM">
13       <Field name="QSR" startColName="A" endColName="B" fontSize="9" align="right" rowIndex="1"/>
14     </Sign>
15     <Sql>
16       <![CDATA[select * from t_cj_hz_fsjzw where HZXX_ID='@HZXX_ID']]>
17     </Sql>
18   </Report>
19 </Reports>

那么我們如何實現根據Report結點里的name屬性值,得到相應的rowPerPage屬性值呢!下面給大家提供幾個方法:

View Code
 1         /// <summary>
 2         /// 根據Repotr結點的name屬性,獲得rowPerPage值
 3         /// </summary>
 4         /// <param name="reportName">屬性name值</param>
 5         /// <returns>rowPerPage值</returns>
 6         public static int GetRowPerPage(string reportName)
 7         {
 8             int rowPerPage = 0;
 9             XmlNode node = GetReportNode(reportName);
10             if (isContainsAttribute(node, "rowPerPage"))
11             {
12                 int.TryParse(node.Attributes["rowPerPage"].Value, out rowPerPage);
13             }
14             return rowPerPage;
15         }
16 
17         /// <summary>
18         /// 獲取報表配置的相應XmlNode
19         /// </summary>
20         /// <param name="reportName">報表名</param>
21         /// <param name="nodeName">配置文件中的節點名,如需要獲取Report節點,則不需要傳入此參數</param>
22         /// <returns>返回報表配置的相應XmlNode</returns>
23         public static XmlNode GetReportNode(string reportName, string nodeName = "")
24         {
25             XmlDocument _objXmlDoc = new XmlDocument();
26             //StartupPath應用程序的可執行程序路徑,也就是bin\Debug下,注意一定要將ReportConfig.xml文件復制到‘輸出目錄’屬性設置為‘始終復制’才能獲取到該文件
27             _objXmlDoc.Load(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "ReportConfig.xml"));
28             string xpath = "Reports//Report[@name='" + reportName + "']";
29             if (!string.IsNullOrEmpty(nodeName))
30             {
31                 xpath += "//" + nodeName;
32             }
33             return _objXmlDoc.SelectSingleNode(xpath);
34         }
35 
36         /// <summary>
37         /// 判斷指定的xml節點中是否包含指定的屬性
38         /// </summary>
39         /// <param name="xmlnode">xml節點</param>
40         /// <param name="attributeName">屬性名</param>
41         /// <returns>判斷指定的xml節點中是否包含指定的屬性,如果包含則返回true,否則返回false</returns>
42         public static bool isContainsAttribute(System.Xml.XmlNode xmlnode, string attributeName)
43         {
44             bool flag = false;
45             for (int i = 0; i < xmlnode.Attributes.Count; i++)
46             {
47                 if (xmlnode.Attributes[i].Name == attributeName)
48                 {
49                     flag = true;
50                     break;
51                 }
52             }
53             return flag;
54         }

 

下面我們就來實現一個簡單的功能吧!

要實現的功能是,當我們改變 ReportName時,要得到對應的rowPerPage值。(我們可以多配幾個Report結點來看效果)

View Code
 1 private void Form1_Load(object sender, EventArgs e)
 2         {
 3             XmlDocument doc = new XmlDocument();
 4             doc.Load(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "ReportConfig.xml"));
 5             //獲取Reports下的所有Report結點
 6             XmlNodeList nodes = doc.SelectNodes("Reports//Report");
 7             for (int i = 0; i < nodes.Count; i++)
 8             {
 9                 for (int j = 0; j < nodes[i].Attributes.Count; j++)
10                 {
11                     if (nodes[i].Attributes[j].Name == "name")
12                     {
13                         cbx_ReportName.Items.Add(nodes[i].Attributes[j].Value);
14                     }
15                 }
16             }
17 
18             //cbx_ReportName.SelectedValueChanged += (action, b) =>
19             //    {
20             //        textBox1.Text = XMLFunction.GetRowPerPage(cbx_ReportName.SelectedItem.ToString()).ToString();
21             //    };
22 
23             //此行代碼+cbx_ReportName_SelectedValueChanged事件等於上面注釋的代碼
24             cbx_ReportName .SelectedValueChanged +=new EventHandler(cbx_ReportName_SelectedValueChanged);
25         }
26 
27         private void cbx_ReportName_SelectedValueChanged(object sender, EventArgs e)
28         {
29             textBox1.Text = XMLFunction.GetRowPerPage(cbx_ReportName.SelectedItem.ToString()).ToString();
30         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM