0

我正在尝试使用以下代码写出使用正则表达式找到的所有匹配项:

  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。看起来代码没有将xlink:href我的<a>标签内的值视为属性?谁能指出我正确的方向?我需要匹配tcm:([^\"]*).

4

2 回答 2

1

问题是你没有找对地方。您elem.Elements正在查看link元素和links元素。其中只有一个具有您正在寻找的属性。在寻找正确的属性之前,您需要更精确地选择要检查的元素。

于 2013-05-03T08:43:57.197 回答
0

我已经让它工作了。我不需要正则表达式,我只需要Descendants在我的 for 循环中获取相反的内容。foreach (var Id in elem.Descendants().Where(x => x.Attribute(xlink + "href") != null))

于 2013-05-03T09:11:47.953 回答