#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";
}
}
}