2012-05-11 34 views
1

我試圖從HTML註釋中提取變量......關於如何完成這些任何想法?從HTML註釋中提取變量和值

註釋的例子...

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

我試圖根據空間的分割,但變量值可以在有空間。

感謝您的幫助!

由於API調用返回HTML標記中的變量 - 所以它不在我的控制範圍之內。 [/編輯]

這可以使用正則表達式嗎?我一直在閱讀,我可以匹配,但沒有其他的東西!

+1

您可以使用隱藏域呢?可能會讓生活更輕鬆。或者這是其他人做出評論意見的情況,而且你試圖找到一種方法使其發揮作用? – peroija

+0

它實際上是爲了響應來自我的web應用程序的HTTP帖子而生成的。這是一個簡單確認數據提交的API響應。不幸的是我無法改變。 –

+0

我們這樣做是爲了解析內部部署的原始服務器名稱和安裝的應用程序版本。我們使用正則表達式來解析通過ajax調用返回的html。匹配評論。然後使用組拉出變量。 –

回答

0

我猜你想通過服務器端代碼訪問,因爲你應用了C#標記。是否有理由選擇這些變量的評論?

您可以使用<asp:HiddenField />並使用Value屬性。訪問這些值並適當地解析將是微不足道的。

如果你絕對需要在評論中有這些。該評論是否包含在帶有ID標籤的其他區塊中?如果是這樣,您可以獲取該對象的InnerHTML並使用基本的String函數來獲取和分析字段。這假設沒有多個評論或沒有明確的方式來定位這個特定評論。

+0

不幸的是,HTML註釋是所有返回的。沒有其他HTML元素。 –

2

您可以使用HTML解析器來獲取意見,即HtmlAgilityPack

您可以參考這個Grabbing meta-tags and comments using HTML Agility Pack

[編輯] 假設你得到的意見和格式是已知的,您可以去除出

我做到這一點,它得到了可變字段的正確

 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(); 
0

簡單的正則表達式應該適用於此。

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; 
    } 

將首先提取'contents'字符串中的所有註釋。然後它會提取它找到的所有變量。它將它們存儲在字典中並將其返回給調用者。

即:

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"];