linq 将SVG innertext值替换为href链接

y3bcpkx1  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(114)

我正在使用SVG文件,这是相同的XML。我需要替换的内部文本的一些元素与一个新的元素与其内部文本的href
我的元素的一个例子是

<text xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill="#ff0000" stroke-width="0" x="239.61" y="74.89" font-size="3.37" opacity="1.00" font-family="Arial Narrow">3070119100</text>

字符串
我需要将3070119100 InnerText替换为

<a link:href="http://www.google.it">3070119100</a>


我想我需要添加一个子元素,并将前一个值作为InnerText。
我想与LINQ XDocument工作,但也赞赏与XMLDocument代码。
我能做什么:我能够使用XMLDocument添加子元素,但不能清除innerText文本元素:

XmlDocument doc = new XmlDocument();
    doc.Load(_SVG);
    XmlNodeList elementListText = doc.GetElementsByTagName("text");
    for (int i = 0; i < elementListText.Count; i++)
    {
        XmlElement a = doc.CreateElement("a");
        a.SetAttribute("xmlns", "http://www.w3.org/2000/svg");
        a.SetAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink");
        a.SetAttribute("xlink:href", "http://www.google.it");
        a.InnerText = elementListText[i].InnerText;
        elementListText[i].AppendChild(a);
    }
    doc.Save(_SVG_TEXT);


通过这种方式,我得到了两次值,一次是未链接的(previous),另一次是链接的(href value),但我无法清除InnerText。
谢谢你,谢谢

tkclm6bt

tkclm6bt1#

使用Xml Linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApp10
{
    class Program
    {
        static void Main(string[] args)
        {

            string _SVG = @"<text xmlns=""http://www.w3.org/2000/svg"" xmlns:xlink=""http://www.w3.org/2000/svg"" xml:space=""preserve"" fill=""#ff0000"" stroke-width=""0"" x=""239.61"" y=""74.89"" font-size=""3.37"" opacity=""1.00"" font-family=""Arial Narrow"">3070119100</text>";
            XDocument doc = XDocument.Parse(_SVG);

            //to read from file
            //XDocument doc = XDocument.Load(filename);
            XNamespace ns = doc.Root.GetDefaultNamespace();
            XNamespace xlink = doc.Root.GetNamespaceOfPrefix("xlink");

            List<XElement> elementListText = doc.Descendants(ns + "text").ToList();
            foreach(XElement element in elementListText)
            {
                string value = element.Value;
                element.RemoveNodes();

                XElement a = new XElement(ns + "a");
                a.SetAttributeValue(ns + "xlink", "http://www.w3.org/1999/xlink");
                a.SetAttributeValue(xlink + "href", "http://www.google.it");
                a.SetValue(value);
                element.Add(a);
            }
            //doc.Save(filename);
        }

    }

}

字符串

相关问题