Как мне создать новый XElement для каждого тега </br> в XML в c #? - PullRequest
0 голосов
/ 17 апреля 2019

Мой XML содержит следующие данные:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE repub SYSTEM "C:\repub\Repub_V1.dtd">
<?xml-stylesheet href="C:\repub\repub.xsl" type="text/xsl"?>
<repub>
<head>
<title>xxx</title>
</head>
<body>
<sec>
<title>First Title</title>
<break name="1-1"/>
<h1><page num="1"/>First Heading</h1>
<bl>This is another text</bl>
<fig><img src="images/img_1-1.jpg" alt=""/><fc>This is a caption</fc></fig>
<p>This<br/> again is<br/> a paragraph</p>
</sec>
</body>
</repub>

Содержит тег <p> с несколькими тегами <br/>. Я хочу создать новый <p> для каждого <br/>.

Чего я хочу достичь:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE repub SYSTEM "C:\repub\Repub_V1.dtd">
<?xml-stylesheet href="C:\repub\repub.xsl" type="text/xsl"?>
<repub>
<head>
<title>xxx</title>
</head>
<body>
<sec>
<title>First Title</title>
<break name="1-1"/>
<h1><page num="1"/>First Heading</h1>
<bl>This is another text</bl>
<fig><img src="images/img_1-1.jpg" alt=""/><fc>This is a caption</fc></fig>
<p>This</p>
<p>again is</p>
<p>a paragraph</p>
</sec>
</body>
</repub>

Я не знаю, как поступить.

Что я пробовал:

Я пытаюсь подойти к нему, используя следующий метод:

foreach (var item in xdoc.Descendants("p"))
{
    if (item.Elements("br").Count() > 0)
    {
        foreach (var br in item.Elements("br"))
        {
            //Do something
        }
    }
}

1 Ответ

0 голосов
/ 17 апреля 2019

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

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


namespace ConsoleApplication108
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            List<XElement> brs = doc.Descendants("br").ToList();

            for (int i = brs.Count - 1; i >= 0; i--)
            {
                brs[i].ReplaceWith(new XElement("br", new XElement("p", new object[] {brs[i].Attributes(), brs[i].Nodes()})));
            }


        }

    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...