gpt4 book ai didi

c# - 解析剪贴板功能 GetData(DataFormats.Html) 输出的标准类

转载 作者:太空狗 更新时间:2023-10-29 22:27:08 26 4
gpt4 key购买 nike

对不起标题...

所以我想从剪贴板中提取文本。此文本是从网页(在浏览器中)复制而来的。在我的例子中,它是一个包含一些数据的表格。

所以我用下面的代码提取了数据(它以字符串形式出现):

IDataObject iData = Clipboard.GetDataObject();

if (iData.GetDataPresent(DataFormats.Html))
{
string s = (string)iData.GetData(DataFormats.Html);
}

我从中得到的(s 包含的内容)如下:

Version:0.9
StartHTML:0000000397
EndHTML:0000004086
StartFragment:0000000433
EndFragment:0000004050
SourceURL:Bla Bla Bla
<html>
<body>
<!--StartFragment--><table class="listing tickets">Bla Bla Bla</table><!--EndFragment-->
</body>
</html>

所以,再说一遍。是否有任何标准类可以解析这些数据,还是我应该自己创建一个?

最佳答案

好吧,答案似乎是否定的!这让我有些吃惊……

无论如何。我制作了自己的帮助类,也许可以帮助你。这只是众多可能解决方案中的一种。对于我的应用程序,如果未找到任何内容,返回 null 效果很好,也许您想要一个异常。另请记住,我将其作为一个副项目进行开发,因此没有对代码进行广泛的测试,因此我不保证其有效

public class ClipboardHtmlOutput
{
public Double Version { get; private set; }
public String Source { get; private set; }
public String Input { get; private set; }
//public String Html { get { return Input.Substring(startHTML, (endHTML - startHTML)); } }
public String Html { get { return Input.Substring(startHTML, Math.Min(endHTML - startHTML, Input.Length - startHTML)); } }
public String Fragment { get { return Input.Substring(startFragment, (endFragment - startFragment)); } }

private int startHTML;
private int endHTML;
private int startFragment;
private int endFragment;

public static ClipboardHtmlOutput ParseString(string s)
{
ClipboardHtmlOutput html = new ClipboardHtmlOutput();

string pattern = @"Version:(?<version>[0-9]+(?:\.[0-9]*)?).+StartHTML:(?<startH>\d*).+EndHTML:(?<endH>\d*).+StartFragment:(?<startF>\d+).+EndFragment:(?<endF>\d*).+SourceURL:(?<source>f|ht{1}tps?://[-a-zA-Z0-9@:%_\+.~#?&//=]+)";
Match match = Regex.Match(s, pattern, RegexOptions.Singleline);

if (match.Success)
{
try
{
html.Input = s;
html.Version = Double.Parse(match.Groups["version"].Value, CultureInfo.InvariantCulture);
html.Source = match.Groups["source"].Value;
html.startHTML = int.Parse(match.Groups["startH"].Value);
html.endHTML = int.Parse(match.Groups["endH"].Value);
html.startFragment = int.Parse(match.Groups["startF"].Value);
html.endFragment = int.Parse(match.Groups["endF"].Value);
}
catch (Exception fe)
{
return null;
}
return html;
}
return null;
}
}

用法可能是这样的:

IDataObject iData = Clipboard.GetDataObject();

if (iData.GetDataPresent(DataFormats.Html))
{
ClipboardHtmlOutput cho = ClipboardHtmlOutput.ParseString((string)iData.GetData(DataFormats.Html));
XmlDocument xml = new XmlDocument();
xml.LoadXml(cho.Fragment);
}

关于c# - 解析剪贴板功能 GetData(DataFormats.Html) 输出的标准类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14604146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com