2013-05-03 100 views
0

我想寫出使用正則表達式與下面的代碼中發現的所有匹配:Linq查詢不匹配的HREF

var source = "<Content><link><a xlink:href=\"tcm:363-48948\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">Read more</a></link><links xlink:href=\"tcm:362-65596\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"/></Content>"; 
    var tridionHref = new Regex("tcm:([^\"]*)"); 
    var elem = XElement.Parse(source); 

    XNamespace xlink = "http://www.w3.org/1999/xlink"; 

    if (tridionHref.IsMatch(elem.ToString())) 
    { 
     foreach (var Id in elem.Elements().Where(x => x.Attribute(xlink + "href") != null)) 
     { 
      Console.WriteLine(Id.Attribute(xlink + "href").Value); //For testing 
      Id.Attribute(xlink + "href").Value = Id.Attribute(xlink + "href").Value.Replace("value1", "value2"); //Just to show you an example 
     } 
    } 

我的控制檯窗口輸出tcm:362-65596但不tcm:363-48948。它看起來像代碼中看不到我的<a>標記中的xlink:href作爲屬性的值?任何人都可以將我指向正確的方向嗎?我需要匹配tcm:([^\"]*)的所有實例。

回答

0

我有它的工作。我不需要一個正則表達式,我只需要在for循環中獲取Descendantsforeach (var Id in elem.Descendants().Where(x => x.Attribute(xlink + "href") != null))

1

問題是你沒有找到正確的地方。您的elem.Elements正在查看link元素和links元素。其中只有一個具有您正在查找的屬性。在查找正確的屬性之前,您需要更精確地選擇要檢查的元素。