private static void resolveLinks(Field richTextField, TcmUri pageUri) { // Find any <a> nodes with xlink:href="tcm attribute string nodeText = richTextField.Value; XmlDocument tempDocument = new XmlDocument(); tempDocument.LoadXml("<tempRoot>" + nodeText + "</tempRoot>"); ILinkFactory linkFactory = new TridionLinkFactory(); XmlNamespaceManager nsManager = new XmlNamespaceManager(tempDocument.NameTable); nsManager.AddNamespace("xlink", "http://www.w3.org/1999/xlink"); XmlNodeList linkNodes = tempDocument.SelectNodes("//*[local-name()='a'][@xlink:href[starts-with(string(.),'tcm:')]]", nsManager); foreach (XmlNode linkElement in linkNodes) { // TODO test with including the Page Uri, seems to always link with Source Page //string linkText = linkFactory.ResolveLink(pageUri.ToString(), linkElement.Attributes["xlink:href"].Value, "tcm:0-0-0"); string linkText = linkFactory.ResolveLink("tcm:0-0-0", linkElement.Attributes["xlink:href"].Value, "tcm:0-0-0"); if (!string.IsNullOrEmpty(linkText)) { XmlAttribute linkUrl = tempDocument.CreateAttribute("href"); linkUrl.Value = linkText; linkElement.Attributes.Append(linkUrl); // Remove the other xlink attributes from the a element for (int attribCount = linkElement.Attributes.Count - 1; attribCount >= 0; attribCount--) { if (!string.IsNullOrEmpty(linkElement.Attributes[attribCount].NamespaceURI)) { linkElement.Attributes.RemoveAt(attribCount); } } } } if (linkNodes.Count > 0) { richTextField.Values.Clear(); richTextField.Values.Add(tempDocument.DocumentElement.InnerXml); } }