------ #### SuperDesign V3.0.2412.2001 - *.[新增]新增程序更新日志设置和自动发布功能。 - *.[修复]修复Post数据格式不正确时双击文本框会导致软件闪退的BUG。
228 lines
8.8 KiB
C#
228 lines
8.8 KiB
C#
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("<!DOCTYPE html>", StringComparison.OrdinalIgnoreCase) ||
|
|
txt.StartsWith("<html", StringComparison.OrdinalIgnoreCase) ||
|
|
txt.IndexOf("<div ", StringComparison.OrdinalIgnoreCase)>=0 ||
|
|
txt.IndexOf("<p ", StringComparison.OrdinalIgnoreCase)>=0)
|
|
{
|
|
CbbXMLType.SelectedIndex = 1;
|
|
TxtXML.SetHightlightText("html");
|
|
}
|
|
else if (txt.StartsWith("<?xml", StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
CbbXMLType.SelectedIndex = 0;
|
|
TxtXML.SetHightlightText("xml");
|
|
}
|
|
else
|
|
{
|
|
CbbXMLType.SelectedIndex = 2;
|
|
TxtXML.SetHightlightText("json");
|
|
}
|
|
ProUse = false;
|
|
}
|
|
|
|
private void BtnGet_Click(object sender, EventArgs e)
|
|
{
|
|
string text = "";
|
|
var format = "";
|
|
var Attr = RichAttr.Text;
|
|
try
|
|
{
|
|
if (CbbXMLType.SelectedIndex == 0)
|
|
{
|
|
format = "xml";
|
|
if (TxtXML.Text.Length > 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 += "<br><br>"; }
|
|
var color = "blue";
|
|
if (i % 2 == 0)
|
|
{
|
|
color = "green";
|
|
}
|
|
if (Attr.Length == 0)
|
|
{
|
|
text += "<span style='color:" + color + "'>" + System.Web.HttpUtility.HtmlEncode(node[i].OuterXml) + "</span>";
|
|
}
|
|
else if (Attr == "-1")
|
|
{
|
|
text += "<span style='color:" + color + "'>" + System.Web.HttpUtility.HtmlEncode(node[i].InnerText) + "</span>";
|
|
}
|
|
else
|
|
{
|
|
text += "<span style='color:" + color + "'>" + System.Web.HttpUtility.HtmlEncode(((XmlElement)node[i]).GetAttribute(Attr)) + "</span>";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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 += "<br><br>"; }
|
|
var color = "blue";
|
|
if (i % 2 == 0)
|
|
{
|
|
color = "green";
|
|
}
|
|
if (Attr.Length == 0)
|
|
{
|
|
text += "<span style='color:" + color + "'>" + System.Web.HttpUtility.HtmlEncode(anchors[i].OuterHtml) + "</span>";
|
|
}
|
|
else if (Attr == "-1")
|
|
{
|
|
text += "<span style='color:" + color + "'>" + System.Web.HttpUtility.HtmlEncode(anchors[i].InnerText) + "</span>";
|
|
}
|
|
else
|
|
{
|
|
text += "<span style='color:" + color + "'>" + System.Web.HttpUtility.HtmlEncode(anchors[i].GetAttributeValue(Attr, "")) + "</span>";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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 += "<br><br>"; }
|
|
var color = "blue";
|
|
if (i % 2 == 0)
|
|
{
|
|
color = "green";
|
|
}
|
|
text += "<span style='color:" + color + "'>" + System.Web.HttpUtility.HtmlEncode(list[i].ToString()) + "</span>";
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
text = "<span style='color:red'>" + System.Web.HttpUtility.HtmlEncode(ex.Message) + "</span>";
|
|
}
|
|
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();
|
|
}
|
|
}
|
|
}
|