Как вывести «FullEndElement ()» для XDocument - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть XDocument, который я хочу записать в файл (указанный ниже под комментарием "// XDocument"), но как только я использую свой метод записи, который написан ниже под комментарием "// writing method", я получилнеполное окончание, например "</>" вместо полного окончания, например "</script>". Мне нужно как-то это исправить.

Мой код:

private static void Execute()
{
    string outputXMLFile = outputXMLFile = @"C:\Temp\testPoints6.html";

    //XDocument
    XDocument documentElement = 
        new XDocument(
            new XDeclaration(
                "1.0", 
                Encoding.Default.ToString(), null
            )
                , 
            new XDocumentType(
                "html", null, null, null
            ));

    XElement html = new XElement("html");
    XElement head = new XElement("head");

    html.Add(new XAttribute("lang", "ru"));
    head.Add(
        new XElement("title",
    "Exported X3DOM Scene"));
    head.Add(
        new XElement("meta",
        new XAttribute("http-equiv", "X-UA-Compatible"),
        new XAttribute("content", "chrome=1")));
    head.Add(
        new XElement("meta",
        new XAttribute("http-equiv", "Content-Type"),
        new XAttribute("content", "text/html;charset=utf-8")));
    head.Add(
        new XElement("link",
        new XAttribute("rel", "stylesheet"),
        new XAttribute("type", "text/css"),
        new XAttribute("href", "http://www.x3dom.org/x3dom/release/x3dom.css")));
    head.Add(
        new XElement("script",
        new XAttribute("type", "text/javascript"),
        new XAttribute("src", "http://www.x3dom.org/x3dom/release/x3dom.js")
    ));

    html.Add(head);

    documentElement.Add(html);

    //writing method
    XmlWriterSettings xws = new XmlWriterSettings();
    xws.Encoding = Encoding.Default;
    xws.Indent = true;
    xws.NewLineOnAttributes = true;
    using ( XmlWriter xw = XmlWriter.Create(outputXMLFile, xws) ) {
        documentElement.WriteTo(xw);
        xw.Flush();
    }
}

Вывод:

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE html >
<html
  lang="ru">
  <head>
    <title>Exported X3DOM Scene</title>
    <meta
      http-equiv="X-UA-Compatible"
      content="chrome=1" />
    <meta
      http-equiv="Content-Type"
      content="text/html;charset=utf-8" />
    <link
      rel="stylesheet"
      type="text/css"
      href="http://www.x3dom.org/x3dom/release/x3dom.css" />
    <script
      type="text/javascript"
      src="http://www.x3dom.org/x3dom/release/x3dom.js" />
  </head>
</html>

Поэтому мне нужен этот XmlWriter для записи "<script> </script>" в мой файл вместо "<script .../>", что неверно и вызывает некоторые проблемы при запуске его в моем браузере

Я взял "решение "включить закрывающий тег из этого поста:" Как заставить принудительно закрывать тег с помощью Linq XML?", но, похоже, он не работает

1 Ответ

0 голосов
/ 22 сентября 2018

Хорошо, я решил это.

Я написал 2 функции, чтобы добавить полные окончания для всего документа:

private static void AddStringEmptyAfterEveryElement(XDocument documentElement)
{
    AddStringEmptyAfterElement(documentElement.Root);
}

private static void AddStringEmptyAfterElement(XElement rootElement)
{
    foreach ( XElement element in rootElement.Descendants() ) {
        if ( element.HasElements ) {
            AddStringEmptyAfterElement(element);
        }
        element.Add(String.Empty);
    }
}
...