C# xml 讀xml、寫xml、Xpath、Xml to Linq、xml添加節點 xml修改節點

 

     #region 增、刪、改操做==============================================
        
        /// <summary>
        /// 追加節點
        /// </summary>
        /// <param name="filePath">XML文檔絕對路徑</param>
        /// <param name="xPath">範例: @"Skill/First/SkillItem"</param>
        /// <param name="xmlNode">XmlNode節點</param>
        /// <returns></returns>
        public static bool AppendChild(string filePath, string xPath, XmlNode xmlNode)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(filePath);
                XmlNode xn = doc.SelectSingleNode(xPath);
                XmlNode n = doc.ImportNode(xmlNode, true);
                xn.AppendChild(n);
                doc.Save(filePath);
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// 從XML文檔中讀取節點追加到另外一個XML文檔中
        /// </summary>
        /// <param name="filePath">須要讀取的XML文檔絕對路徑</param>
        /// <param name="xPath">範例: @"Skill/First/SkillItem"</param>
        /// <param name="toFilePath">被追加節點的XML文檔絕對路徑</param>
        /// <param name="toXPath">範例: @"Skill/First/SkillItem"</param>
        /// <returns></returns>
        public static bool AppendChild(string filePath, string xPath, string toFilePath, string toXPath)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(toFilePath);
                XmlNode xn = doc.SelectSingleNode(toXPath);

                XmlNodeList xnList = ReadNodes(filePath, xPath);
                if (xnList != null)
                {
                    foreach (XmlElement xe in xnList)
                    {
                        XmlNode n = doc.ImportNode(xe, true);
                        xn.AppendChild(n);
                    }
                    doc.Save(toFilePath);
                }
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// 修改節點的InnerText的值
        /// </summary>
        /// <param name="filePath">XML文件絕對路徑</param>
        /// <param name="xPath">範例: @"Skill/First/SkillItem"</param>
        /// <param name="value">節點的值</param>
        /// <returns></returns>
        public static bool UpdateNodeInnerText(string filePath, string xPath, string value)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(filePath);
                XmlNode xn = doc.SelectSingleNode(xPath);
                XmlElement xe = (XmlElement)xn;
                xe.InnerText = value;
                doc.Save(filePath);
            }
            catch
            {
                return false;
            }
            return true;
        }

        /// <summary>
        /// 讀取XML文檔
        /// </summary>
        /// <param name="filePath">XML文件絕對路徑</param>
        /// <returns></returns>
        public static XmlDocument LoadXmlDoc(string filePath)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(filePath);
                return doc;
            }
            catch
            {
                return null;
            }
        }
        #endregion 增、刪、改操做

        #region 擴展方法===================================================
        /// <summary>
        /// 讀取XML的全部子節點
        /// </summary>
        /// <param name="filePath">XML文件絕對路徑</param>
        /// <param name="xPath">範例: @"Skill/First/SkillItem"</param>
        /// <returns></returns>
        public static XmlNodeList ReadNodes(string filePath, string xPath)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(filePath);
                XmlNode xn = doc.SelectSingleNode(xPath);
                XmlNodeList xnList = xn.ChildNodes;  //獲得該節點的子節點
                return xnList;
            }
            catch
            {
                return null;
            }
        }

        #endregion 擴展方法
擴                   展

 

 #region XDocument
            //建立XDocument
            XDocument xdoc2 = new XDocument();
            XElement xel1= new XElement("AA",new XAttribute("mark","mark"));
            xel1.Add(new XElement("AA1","2"));
            xel1.Add(new XElement("AA2", "3"));
            XElement xel2 = new XElement("AA");
            xel2.Add(new XElement("AA1", "2"));
            xel2.Add(new XElement("AA2", "3"));
            xel2.Add(new XElement("AAA1", new XElement("AAA1","4")));
            XElement xel = new XElement("A");
            xel.Add(xel2, xel1);
            xdoc2.Add(xel);

            ///循環XDocument 
            foreach (XElement xElement in xdoc2.Document.Root.Elements())
            {
                //根據節點名稱獲取值
                string text=xElement.Element("AA1").Value;
                //string text2 = xElement.Element("AAA1").Element("AAA1").Value;
                //修改節點
                xElement.SetElementValue("AA1", "AAA2");
                //添加屬性
                xElement.SetAttributeValue("name", "name");
                //設置值
                xElement.Element("AA1").SetValue("");
            }
            #endregion

            #region XmlDocument
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("D://Pro//EGP410_5//Test//XMLFile1.xml");
            //循環XmlDocument
            XmlNodeList xmlNode= xmlDoc.DocumentElement.ChildNodes;
            foreach (XmlNode item in xmlNode)
            {
            }
            //查詢
            string str = xmlDoc.DocumentElement.SelectSingleNode("DTrue").InnerText;
            str = xmlDoc.DocumentElement.SelectSingleNode("/Result/DTrue").InnerText;
            //修改
            xmlDoc.DocumentElement.SelectSingleNode("DTrue").InnerText = "DTrue";
            //獲取屬性
            str = xmlDoc.DocumentElement.GetAttribute("mark");
            //修改屬性
            xmlDoc.DocumentElement.SetAttribute("mark", "1543286313566");
            //保存。
            xmlDoc.Save("D://Pro//EGP410_5//Test//XMLFile1.xml");

            #endregion
View Code  XDocument和XmlDocument的建立 修改 查詢 屬性 循環等操做

xml的讀javascript

XElement xele1 = XElement.Load(Path);  //根據路徑獲取xml元素html

XElement xele2 = XElement.Parse("");      //根據字符串獲取xml元素java

 

XmlDocument doc = new XmlDocument();node

doc.LoadXml(xele1.ToString());        //根據字符串獲取xml文檔ide

doc.Load(Path);                 //根據路徑獲取xml文檔ui

xml的取xpathspa

  

 XDocument doc = XDocument.Load(Path);
 XElement root = doc.Element("DATASET").Element("BUYER_NAME");code

 string text = xnode.InnerText;           //獲取值(方式一)server

 

 XmlNode node=doc2.SelectSingleNode("//DATASET/BUYER_NAME");     //獲取單個xmlnode 不用循環xml

  XmlNodeList nodes = doc.SelectNodes("//A/A01/A0101");   // 雙斜線表示不從根目錄取(獲取多個xmlnode 因此要採用循環)

  foreach (XmlNode de in nodes)
  {
        var dsd = de.InnerText;      //獲取值(方式二)
  }

  xml的寫包括寫入備註 (linq to xml)

        public static void CreateXmlByLink()
        {
            XDocument xdoc = new XDocument(
            new XDeclaration("1.0", "utf-8", "yes"),
            new XComment("提示"),
                new XElement("root",
                    new XElement("A",
                        new XElement("A01",
                        new XElement("A0101", "貨物A0101"),
                        new XComment("提示"), 
                        new XAttribute("V1", "1"),
                        new XElement("A0102", "貨物A0102"),
                         new XElement("A0103",
                            new XAttribute("V1", "1"),
                             new XElement("A010301",new XAttribute("V1", "1"), "貨物A010301"),
                             new XElement("A010302", "貨物A010302")
                             )
                        ),
                        new XElement("A01",
                        new XElement("A0101", "貨物A0101"),
                        new XElement("A0102", "貨物A0102"),
                         new XElement("A0103",
                             new XElement("A010301", "貨物A010301"),
                             new XElement("A010302", "貨物A010302")
                             )
                             )
                        ),



                                    new XElement("B",
                        new XElement("A01",
                        new XElement("A0101", "貨物A0101"),
                        new XElement("A0102", "貨物A0102"),
                         new XElement("A0103",
                             new XElement("A010301", "貨物A010301"),
                             new XElement("A010302", "貨物A010302")
                             )
                        ),
                        new XElement("A01",
                        new XElement("A0101", "貨物A0101"),     
                        new XElement("A0102", "貨物A0102"),
                         new XElement("A0103",
                             new XElement("A010301", "貨物A010301"),
                             new XElement("A010302", "貨物A010302")
                             )
                             )
                        ),


                             new XElement("C",
                        new XElement("A01",
                        new XElement("A0101", "貨物A0101"),
                        new XElement("A0102", "貨物A0102"),
                         new XElement("A0103",
                             new XElement("A010301", "貨物A010301"),
                             new XElement("A010302", "貨物A010302")
                             )
                        ),
                        new XElement("A01",
                        new XElement("A0101", "貨物A0101"),
                        new XElement("A0102", "貨物A0102"),
                         new XElement("A0103",
                             new XElement("A010301", "貨物A010301"),
                             new XElement("A010302", "貨物A010302")
                             )
                             )
                        )
                    )
            );
            xdoc.Save(Path);
        }
View Code

 

添加節點

 

XmlNode node= doc.SelectNodes("//A/A01/A0101")[0];     //修改/添加 路徑下   的第一個節點 

XmlElement no = doc.CreateElement("newNode");
no.InnerText = "新增節點1";
node.AppendChild(no);  //新增

修改、刪除xml節點

foreach (XmlNode item in node)
{
XmlElement xe = (XmlElement)item ;
if (xe.GetAttribute("A") == "A01")
{
xe.SetAttribute("A","A");  //修改

xe.Remove("A");  //修改
}
}

 xml 映射到頁面table(參照http://www.w3school.com.cn/tiy/t.asp?f=xmle_display_table_1)

<!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>
    <style>
        .a {
            border: 1px solid red;
        }
    </style>
    <script type="text/javascript">
        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        }
        else {// code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.open("GET", "test.xml", false);
        xmlhttp.send();

        xmlDoc = xmlhttp.responseXML;

        var html = "<table border='1' class=\"a\" style=\"width:100px;height:20px\">";
        var x = xmlDoc.getElementsByTagName("CD");
        for (i = 0; i < x.length; i++) {
            html = html + "</td><td>";
            html = html + x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue;
            html = html + "</td><td>";
            html = html + x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue;

            html = html + "</td><td>";
            html = html + x[i].getElementsByTagName("COUNTRY")[0].childNodes[0].nodeValue;
            html = html + "</td></tr>";
        }
        html = html + "</table>";
        document.write(html)
    </script>
</head>
<body>
</body>
</html>
View Code
相關文章
相關標籤/搜索