using HtmlAgilityPack; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using ryControls; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using System.Xml; using WeifenLuo.WinFormsUI.Docking; using static System.Net.Mime.MediaTypeNames; namespace 开发辅助工具.Tools { public partial class FrmXpath : DockContent { public FrmXpath() { InitializeComponent(); CbbXMLType.SelectedIndex = 0; } private void RySearchXpath_OnSearch(object sender, EventArgs e) { } private void FrmXpath_Load(object sender, EventArgs e) { } private void TxtXML_DoubleClick(object sender, EventArgs e) { ryControls.Controls.RichTextBox2 txt = (ryControls.Controls.RichTextBox2)sender; 开发辅助工具.Controls.FrmText frm = new Controls.FrmText { Icon = Icon }; frm.richTextBox1.Text = txt.Text; if (frm.ShowDialog() == DialogResult.OK) { txt.Text = frm.richTextBox1.Text; } } bool ProUse = false; private void CbbXMLType_SelectedIndexChanged(object sender, EventArgs e) { if (ProUse) { return; } ProUse = true; if (CbbXMLType.SelectedIndex == 2) { TxtXML.SetHightlightText(TxtXML.Text, "json"); label1.Text = "JPath表达式"; } else if(CbbXMLType.SelectedIndex == 1) { TxtXML.SetHightlightText(TxtXML.Text, "html"); label1.Text = "XPath表达式"; } else { TxtXML.SetHightlightText(TxtXML.Text, "xml"); label1.Text = "XPath表达式"; } ProUse = false; BtnGet.PerformClick(); } private void TxtXML_TextChanged(object sender, EventArgs e) { if (ProUse) { return; } ProUse = true; var txt = TxtXML.Text.Trim(); if (txt.StartsWith("", StringComparison.OrdinalIgnoreCase) || txt.StartsWith("=0 || txt.IndexOf("

=0) { CbbXMLType.SelectedIndex = 1; TxtXML.SetHightlightText("html"); } else if (txt.StartsWith(" 0) { System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); xml.LoadXml(TxtXML.Text); var node = xml.SelectNodes(RichXpath.Text); if (node != null) { for (int i = 0; i < node.Count; i++) { if (text != "") { text += "

"; } var color = "blue"; if (i % 2 == 0) { color = "green"; } if (Attr.Length == 0) { text += "" + System.Web.HttpUtility.HtmlEncode(node[i].OuterXml) + ""; } else if (Attr == "-1") { text += "" + System.Web.HttpUtility.HtmlEncode(node[i].InnerText) + ""; } else { text += "" + System.Web.HttpUtility.HtmlEncode(((XmlElement)node[i]).GetAttribute(Attr)) + ""; } } } } } else if (CbbXMLType.SelectedIndex == 1) { format = "html"; if (TxtXML.Text.Length > 0) { HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(TxtXML.Text); HtmlNodeCollection anchors = htmlDoc.DocumentNode.SelectNodes(RichXpath.Text); if (anchors != null) { for (int i = 0; i < anchors.Count; i++) { if (text != "") { text += "

"; } var color = "blue"; if (i % 2 == 0) { color = "green"; } if (Attr.Length == 0) { text += "" + System.Web.HttpUtility.HtmlEncode(anchors[i].OuterHtml) + ""; } else if (Attr == "-1") { text += "" + System.Web.HttpUtility.HtmlEncode(anchors[i].InnerText) + ""; } else { text += "" + System.Web.HttpUtility.HtmlEncode(anchors[i].GetAttributeValue(Attr, "")) + ""; } } } } } else if (CbbXMLType.SelectedIndex == 2) { format = "json"; if (TxtXML.Text.Length > 0) { try { JObject jo = (JObject)JsonConvert.DeserializeObject(TxtXML.Text); var list = jo.SelectTokens(RichXpath.Text).ToList(); for (int i = 0; i < list.Count; i++) { if (text != "") { text += "

"; } var color = "blue"; if (i % 2 == 0) { color = "green"; } text += "" + System.Web.HttpUtility.HtmlEncode(list[i].ToString()) + ""; } } catch { } } } } catch (Exception ex) { text = "" + System.Web.HttpUtility.HtmlEncode(ex.Message) + ""; } htmlPanel1.Text = text; } private void RichXpath_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { BtnGet.PerformClick(); } } private void RichAttr_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { BtnGet.PerformClick(); } } private void RichXpath_TextChanged(object sender, EventArgs e) { } private void RichXpath_LongTimeNoChanged(object sender, EventArgs e) { BtnGet.PerformClick(); } private void RichAttr_LongTimeNoChanged(object sender, EventArgs e) { BtnGet.PerformClick(); } } }