Как добавить текст в ссылку на объявление Xml DOCTYPE?

#c# #xml #append #doctype

#c# #xml #добавить #doctype

Вопрос:

Допустим, у меня есть doctype :

 <!DOCTYPE beer PUBLIC "-//BEER//DTD beer DTD version 2.0//KF//XML" "Kingfisher.dtd">
  

Мое требование заключается в том, что у меня есть путь (текст), который необходимо добавить к doctype следующим образом :

 path = "C:/Beer/"
  

Итак, после добавления path к ссылке dtd мой doctype должен выглядеть следующим образом :

 <!DOCTYPE beer PUBLIC "-//BEER//DTD beer DTD version 2.0//KF//XML" "C:/Beer/Kingfisher.dtd">
  

Ответ №1:

Вы, конечно, могли бы сделать это с помощью regex, но не должны. В .net есть гораздо лучшие инструменты для работы с xml.

 var xml = "<!DOCTYPE beer PUBLIC "-//BEER//DTD beer DTD version 2.0//KF//XML" "Kingfisher.dtd"><root></root>";

var xd = XDocument.Parse(xml);

var path = "C:/Beer/";
xd.DocumentType.SystemId = Path.Combine(path, xd.DocumentType.SystemId)
  

Ответ №2:

Использование Xml Linq :

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml = "<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE beer PUBLIC "-//BEER//DTD beer DTD version 2.0//KF//XML" "Kingfisher.dtd"><root></root>";
            XDocument doc = XDocument.Parse(xml);

            XDocumentType _type  =  (XDocumentType)doc.Nodes().Where(x => x.NodeType == XmlNodeType.DocumentType).FirstOrDefault();
            _type.SystemId = "C:/Beer/Kingfisher.dtd";

        }
    }
}