我正在尝试用以下代码写出使用正则表达式找到的所有匹配项:
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:([^\"]*)
的所有实例。
答案 0 :(得分:1)
问题是你没找对地方。您的elem.Elements
正在查看link
元素和links
元素。其中只有一个具有您正在寻找的属性。在查找正确的属性之前,您需要更精确地选择要检查的元素。
答案 1 :(得分:0)
我已经开始工作了。我不需要正则表达式,我只需要在{for循环中取代Descendants
。 foreach (var Id in elem.Descendants().Where(x => x.Attribute(xlink + "href") != null))