Запись XML Файл - PullRequest
       3

Запись XML Файл

0 голосов
/ 02 марта 2020

Эй, ребята, во-первых, я хотел бы поблагодарить всех вас за ваше время и за чтение моего вопроса. У меня есть файл XML, который

<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.MyWEbSite.com/video/ScreenImage/Photoq </loc>
<video>
  <thumbnail_loc>https://www.MyWEbSite.com/video/ScreenImage/MyWEbSiteMyTitle.mp4.Jpg</thumbnail_loc>
  <title>MyTitle</title>
  <description>My Dec</description>
  <content_loc>https://www.MyWEbSite.com/api/media/play?f=MyWEbSiteMyTitle.mp4</content_loc>
  <duration>
    500
  </duration>
  <expiration_date>2050-11-05T19:20:30+08:00</expiration_date>
  <view_count>982</view_count>
  <publication_date>2019-04-12</publication_date>
  <family_friendly>yes</family_friendly>
  <live>No</live>
  <category>دين</category>
</video>
</url>
</urlset>

Я хочу, чтобы мой файл Xml был вот так:

*<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.myWebsite.com</loc>
<video:video>
  <video:thumbnail_loc>https://www.MyWEbSite.com/video/ScreenImage/Photoq </video:thumbnail_loc>
  <video:title>MyTitle</video:title>
  <video:description>My Dec</video:description>
  <video:content_loc>https://www.MyWEbSite.com/api/media/MyWEbSiteMyTitle.mp4</video:content_loc>
  <video:duration>
    500
  </video:duration>
  <video:expiration_date>2050-11-05T19:20:30+08:00</video:expiration_date>
  <video:view_count>982</video:view_count>
  <video:publication_date>2019-04-12</video:publication_date>
  <video:family_friendly>yes</video:family_friendly>
  <video:live>No</video:live>
  <video:category>دين</video:category>
</video:video>
</url>
 </urlset>*

И этот код, который я использую, чтобы написать мой xml файл

        string a = "video:video";
        string b = "video:thumbnail_loc";
        string c = "video:title";
        string vd = "video:description";
        string d = "video:content_loc";
        string e = "video:view_count";
        string f = "video:family_friendly";
        string g = "video:live";
        string h = "video:category";
        string k = "video:publication_date";
        string m = "video:duration";
        string nn = "video:expiration_date";
        string xmlpath = @"~/MyXmlFile.xml";
        string path = Server.MapPath(xmlpath);
        XmlDocument doc = new XmlDocument();

        doc.Load(path);
        var mainRoot = doc.DocumentElement; //urlset element
        var urlRoot = mainRoot.AppendChild(doc.CreateElement("url", mainRoot.NamespaceURI));
        urlRoot.AppendChild(doc.CreateElement(("loc"), mainRoot.NamespaceURI));
        urlRoot.ChildNodes[0].InnerText = VideoURL;
        var VidooTree = urlRoot.AppendChild(doc.CreateElement(a, ""));
        VidooTree.AppendChild(doc.CreateElement(b)).InnerText = imgur;
        VidooTree.AppendChild(doc.CreateElement(c)).InnerText = VideoTitle;
        VidooTree.AppendChild(doc.CreateElement(vd)).InnerText = videoDec;
        VidooTree.AppendChild(doc.CreateElement(d)).InnerText = VideoApi;
        VidooTree.AppendChild(doc.CreateElement(m)).InnerText = duration;
        VidooTree.AppendChild(doc.CreateElement(nn)).InnerText = "2050-11-05T19:20:30+08:00";
        VidooTree.AppendChild(doc.CreateElement(e)).InnerText = watched;
        VidooTree.AppendChild(doc.CreateElement(k)).InnerText = date;
        VidooTree.AppendChild(doc.CreateElement(f)).InnerText = "yes";
        VidooTree.AppendChild(doc.CreateElement(g)).InnerText = "No";
        VidooTree.AppendChild(doc.CreateElement(h)).InnerText = VideoKindName;
        urlRoot.AppendChild(VidooTree);
        mainRoot.AppendChild(urlRoot);

        doc.Save(Server.MapPath(xmlpath));

        var xmlRead = File.ReadAllText(path);

        var indexVideo = xmlRead.IndexOf(@"<video xmlns=""");
        var sString = xmlRead.Substring(indexVideo, 15);
        xmlRead = xmlRead.Replace(sString, "<video");
        File.WriteAllText(path, xmlRead);

Я очень благодарен за всех вас, и я очень благодарен за ваши времена, ребята хороший день и много веселья

1 Ответ

1 голос
/ 04 марта 2020

Сначала используйте перегрузку doc.CreateElement с nameSpaceURI
Второй Изолируйте подстроку <Video> элемента , затем выполните l oop до xmlns==-1 что указывает на то, что в подстроке больше нет атрибутов xmlns .

Внутри l oop мы заменяем строку, которая начинается с " xmlns" и заканчивается ">", что соответствует нашему поиску критерии

.
.
var VidooTree = urlRoot.AppendChild(doc.CreateElement(a,a));
VidooTree.AppendChild(doc.CreateElement(b, b)).InnerText = "thumbNail";
VidooTree.AppendChild(doc.CreateElement(c, c)).InnerText = "VideoTitle";
.
.
doc.Save(Server.MapPath(xmlpath));
var xmlRead = File.ReadAllText(path);

var indexVideoSearch = xmlRead.IndexOf(@"<video:video xmlns:video=");

var firstPart = xmlRead.Substring(0, indexVideoSearch);
var secondPart = xmlRead.Substring(indexVideoSearch);

while( secondPart.IndexOf(@" xmlns")!=-1)
{
    var index2 = secondPart.IndexOf(@" xmlns");
    var lengthToCapture = secondPart.IndexOf(@""">")+1;
    var differnce = lengthToCapture - index2;
    var stringToRemove = secondPart.Substring(index2, differnce);
    secondPart =  secondPart.Replace(stringToRemove, string.Empty);
}

xmlRead = firstPart + secondPart;

File.WriteAllText(path, xmlRead);

Пример выходного формата:

<url>
    <loc>VideoURL</loc>
    <video:video>
      <video:thumbnail_loc>thumbNail</video:thumbnail_loc>
      <video:title>VideoTitle</video:title>
      <video:category>VideoKindName</video:category>
    </video:video>
  </url>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...