Primo Chalice Ответов: 1

Как разбить XML на несколько файлов по определенным тегам?


- Привет!

Это мой XML-файл:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE donhag SYSTEM "C:\donhag\donhag_V1.dtd">
<?xml-stylesheet href="C:\donhag\donhag.xsl" type="text/xsl"?>
<donhag>
<head>
<title>TAKEABREAK</title>
</head>
<body>
<sec>
<title>Editorial</title>
<break name="5-1"/>
<h1><page num="5"/>This is a heading</h1>
<h3>This is a sub-heading</h3>
<p>This is a paragraph</p>
<fig>This is an image</fig>
</sec>
<sec>
<title>Your Lives</title>
<break name="6-1"/>
<h1><page num="6"/>This is a heading</h1>
<h3>This is a sub-heading</h3>
<p>This is a paragraph</p>
<fig>This is an image</fig>
</sec>
<sec>
<title>Your Prize Puzzles</title>


Здесь есть три тега "название". Я хочу разделить XML на несколько xml-файлов, где каждый XML-файл будет содержать данные от <title> до следующего <title>.

Таким образом, выход будет:

XML1:

<title>TAKEABREAK</title>
</head>
<body>
<sec>
<title>Editorial</title>
<break name="5-1"/>
<h1><page num="5"/>This is a heading</h1>
<h3><b>This is a sub-heading</b></h3>
<p>This is a paragraph</p>
<fig>This is an image</fig>
</sec>
<sec>


XML 2:

<title>Your Lives</title>
<break name="6-1"/>
<h1><page num="6"/>This is a heading</h1>
<h3><b>This is a sub-heading</b></h3>
<p>This is a paragraph</p>
<fig>This is an image</fig>
</sec>
<sec>


Пожалуйста помочь.

С уважением
Аман

Что я уже пробовал:

Я прочитал XML, и мне нужно разделить его с помощью Xdocument.

Maciej Los

Желаемый XML - файл не очень хорошо обработан. Нет никакого корневого узла.

Primo Chalice

Итак, разве это невозможно без <root>, потому что это пользовательские XML-файлы, поэтому у нас есть наши собственные корневые теги. "донхаг" в данном случае.

С уважением

CHill60

В разделе "Что я пробовал" вы помещаете код, который уже пытались написать, чтобы мы могли проанализировать его и исправить

1 Ответов

Рейтинг:
2

Maciej Los

Попробовать это:

string sSourceFileName  = @"YourXmlFileNameHere.xml";
XDocument xdoc = XDocument.Load(sSourceFileName);
List<XElement> titles = xdoc.Descendants("title").ToList();
foreach(XElement xele in titles)
{
    XDocument xd = new XDocument(
    new XElement("donhag",
        new XElement(xele.Name, xele.Value),
        xele.ElementsAfterSelf()));
    string sNewFileName = Path.Combine(@"D:\MyXmlData\", xele.Value.ToString().Replace(" ", "") + ".xml");
    xd.Save(sNewFileName);
}


Результат - 4 файла:
====
D:\MyXmlData\TAKEABREAK.xml
'----
<donhag>
  <title>TAKEABREAK</title>
</donhag>

====
D:\MyXmlData\Editorial.xml
'----
<donhag>
  <title>Editorial</title>
  <break name="5-1" />
  <h1>
    <page num="5" />This is a heading</h1>
  <h3>This is a sub-heading</h3>
  <p>This is a paragraph</p>
  <fig>This is an image</fig>
</donhag>

====
D:\MyXmlData\YourLives.xml
'----
<donhag>
  <title>Your Lives</title>
  <break name="6-1" />
  <h1>
    <page num="6" />This is a heading</h1>
  <h3>This is a sub-heading</h3>
  <p>This is a paragraph</p>
  <fig>This is an image</fig>
</donhag>

====
D:\MyXmlData\YourPrizePuzzles.xml
'----
<donhag>
  <title>Your Prize Puzzles</title>
  <break name="7-1" />
  <h1>
    <page num="7" />This is a heading</h1>
  <h3>This is a sub-heading</h3>
  <p>This is a paragraph</p>
  <fig>This is an image</fig>
</donhag>