XPath相关笔记

时间:2021-08-02 14:48:42
<?xml version="1.0" encoding="utf-8" ?>
<employees>
  <employee on="01">
    <name>Tom</name>
    <sex>男</sex>
    <birth>
      <year>1982</year>
      <month>5</month>
      <day>22</day>
    </birth>
    <sales>
      <year>2010</year>
      <month>1</month>
      <sale>320000</sale>
    </sales>
    <salary>8600</salary>
  </employee>
  
  <employee on="02">
    <name>Jack</name>
    <sex>男</sex>
    <birth>
      <year>1981</year>
      <month>7</month>
      <day>10</day>
    </birth>
    <sales>
      <year>2010</year>
      <month>1</month>
      <sale>300000</sale>
    </sales>
    <salary>6000</salary>
  </employee>
  <employee on="03">
    <name>Jennifer</name>
    <sex>女</sex>
    <birth>
      <year>1982</year>
      <month>6</month>
      <day>22</day>
    </birth>
    <sales>
      <year>2010</year>
      <month>1</month>
      <sale>500000</sale>
    </sales>
    <salary>7000</salary>
  </employee>
  
</employees>
=============================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.XPath;
namespace WebApplication
{
    public partial class XPathNav : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void btnNav_Click(object sender, EventArgs e)
        {
            //创建XPathDocument对象
            XPathDocument xdoc = new XPathDocument(Server.MapPath("~/employees.xml")); 
            //创建Xpath导航
            XPathNavigator xnav = xdoc.CreateNavigator();
            //装入迭代器(结果)
            XPathNodeIterator iterator = xnav.Select("descendant::employee");  
            string outPut = "";
            while(iterator.MoveNext()){
                outPut += "员工:" + iterator.Current.SelectSingleNode("name").Value+"<br/>"; //在当前节点下查找单一的节点name的值
                outPut += " " + "工资:" + iterator.Current.SelectSingleNode("salary").Value + "<br/>"; // 在当前节点下查找单一的节点salary的值
                outPut += "<hr>";
            }
            outPut += "<hr>";
            Int32 avgSal = (Int32)(Double)xnav.Evaluate("sum(//employee/salary) div count(//employee)");
            outPut += "平均工资:¥"+avgSal.ToString();
            this.divOut.InnerHtml = outPut;
        }
    }
}
===================================================================
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="XPathNav.aspx.cs" Inherits="WebApplication.XPathNav" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
         <asp:Button runat="server" ID="btnNav" Text="Navigate" OnClick="btnNav_Click"  />
         <div runat="server" id="divOut">
         </div>
    </div>
    </form>
</body>
</html>
=================================================================