【问题标题】:extract variables and values from HTML comment从 HTML 注释中提取变量和值
【发布时间】:2012-05-20 02:49:03
【问题描述】:

我正在尝试从 HTML 注释中提取变量...关于如何做到这一点的任何想法?

评论示例...

<!-- variable1: "wer2345235" variable2: "sdfgh333" variable3: "sdfsdfdfsdf"  -->

我尝试根据空格进行拆分,但变量值可能有空格。

感谢您的帮助!

[编辑] HTML 标记内的变量是作为 API 调用的结果返回的 - 所以它不在我的控制范围内。 [/编辑]

[编辑 2] 这可以使用正则表达式完成吗?我一直在阅读,我可以匹配但其他的不多! [/编辑]

【问题讨论】:

  • 你能用隐藏字段代替吗?可能会让生活更轻松。或者这是其他人提出评论想法而您一直在努力寻找使其发挥作用的方法的情况?
  • 它实际上是为了响应来自我的网络应用程序的 HTTP 帖子而生成的。这是一个简单地确认数据提交的 API 响应。不幸的是,我无法改变。
  • 我们这样做是为了解析源服务器名称和已安装的应用程序版本以进行内部部署。我们使用正则表达式来解析通过 ajax 调用返回的 html。匹配评论。然后使用组提取变量。

标签: c# asp.net html regex string


【解决方案1】:

简单的正则表达式应该可以解决这个问题。

    private Dictionary<string,string> ParseCommentVariables(string contents)
    {
        Dictionary<string,string> variables = new Dictionary<string,string>();

        Regex commentParser = new Regex(@"<!--.+?-->", RegexOptions.Compiled);
        Regex variableParser = new Regex(@"\b(?<name>[^:]+):\s*""(?<value>[^""]+)""", RegexOptions.Compiled);
        var comments = commentParser.Matches(contents);
        foreach (Match comment in comments)
            foreach (Match variable in variableParser.Matches(comment.Value))
                if (!variables.ContainsKey(variable.Groups["name"].Value))
                    variables.Add(variable.Groups["name"].Value, variable.Groups["value"].Value);
        return variables;
    }

将首先从“内容”字符串中提取所有 cmets。然后它将提取它找到的所有变量。它将这些存储在字典中并将其返回给调用者。

即:

string contents = "some other HTML, lalalala <!-- variable1: \"wer2345235\" variable2: \"sdfgh333\" variable3: \"sdfsdfdfsdf\"  --> foobarfoobarfoobar";
var variables = ParseCommentVariables(contents);
string variable1 = variables["variable1"];
string variable2 = variables["variable2"];

【讨论】:

    【解决方案2】:

    您可以使用 HTML 解析器来获取 cmets,即HtmlAgilityPack

    你可以参考这个Grabbing meta-tags and comments using HTML Agility Pack

    [编辑] 假设你得到了 cmets 并且格式是已知的,你可以去掉

    我这样做了,它得到了正确的变量字段

            var str = "variable1: \"wer2345235\" variable2: \"sdfgh333\" variable3: \"sdfsdfdfsdf\"";
            var r = new Regex(@"variable[\d]+: ");
            var result = r.Split(str);
            foreach( var match in result)
            {
                Console.WriteLine(match);
            }
    
            Console.ReadLine();
    

    【讨论】:

      【解决方案3】:

      我猜你想通过服务器端代码访问,因为你应用了 C# 标记。是否有理由为这些变量选择评论?

      您可以使用&lt;asp:HiddenField /&gt; 并使用Value 属性。访问这些值并进行适当的解析将是微不足道的。

      如果您绝对需要在评论中包含这些内容。注释是否包含在带有 ID 标签的其他块中?如果是这样,您可以获取该对象的 InnerHTML 并使用基本的 String 函数来获取和解析字段。这假设当然没有多个 cmets 或没有明确的方式来定位这个特定的评论。

      【讨论】:

      • 不幸的是,返回的只是 HTML 注释。没有其他 HTML 元素。
      猜你喜欢
      • 2015-08-24
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 2019-03-02
      • 2017-03-06
      • 2020-09-19
      相关资源
      最近更新 更多