Изменение порядка узлов XML с помощью C # - PullRequest
0 голосов
/ 20 февраля 2019

Моя программа имеет список, который позволяет пользователям выбирать порядок узлов CaseName.В списке есть следующие элементы в указанном порядке:

"Normal Cold Start"
"Normal Warm Start"
"Normal Very Hot Start"

Следующий файл XML соответствует приведенному выше списку:

<?xml version="1.0" standalone="yes"?>
<DsCyclicLoading xmlns="http://tempuri.org/DsCyclicLoading.xsd">
  <CyclicLoading>
    <ComponentID>1</ComponentID>
    <ComponentName>ABC</ComponentName>
    <Standard>123</Standard>
    <CaseName>Normal Cold Start</CaseName>
  </CyclicLoading>
  <CyclicLoading>
    <ComponentID>2</ComponentID>
    <ComponentName>DEF</ComponentName>
    <Standard>456</Standard>
    <CaseName>Normal Warm Start</CaseName>
  </CyclicLoading>
  <CyclicLoading>
    <ComponentID>3</ComponentID>
    <ComponentName>GHI</ComponentName>
    <Standard>789</Standard>
    <CaseName>Normal Very Hot Start</CaseName>
  </CyclicLoading>
</DsCyclicLoading>

Я хочу изменить файл XML, чтобы он отображалследующий новый порядок:

"Normal Very Hot Start"
"Normal Cold Start"
"Normal Warm Start"

Итак, новый XML-файл выглядит так:

    <?xml version="1.0" standalone="yes"?>
<DsCyclicLoading xmlns="http://tempuri.org/DsCyclicLoading.xsd">
  <CyclicLoading>
    <ComponentID>3</ComponentID>
    <ComponentName>GHI</ComponentName>
    <Standard>789</Standard>
    <CaseName>Normal Very Hot Start</CaseName>
  </CyclicLoading>
  <CyclicLoading>
    <ComponentID>1</ComponentID>
    <ComponentName>ABC</ComponentName>
    <Standard>123</Standard>
    <CaseName>Normal Cold Start</CaseName>
  </CyclicLoading>
  <CyclicLoading>
    <ComponentID>2</ComponentID>
    <ComponentName>DEF</ComponentName>
    <Standard>456</Standard>
    <CaseName>Normal Warm Start</CaseName>
  </CyclicLoading>
</DsCyclicLoading>

Как я могу это сделать?

1 Ответ

0 голосов
/ 21 февраля 2019

Попробуйте это:

var xd = XDocument.Parse(@"<?xml version=""1.0"" standalone=""yes""?>
<DsCyclicLoading xmlns=""http://tempuri.org/DsCyclicLoading.xsd"">
    <CyclicLoading>
        <ComponentID>1</ComponentID>
        <ComponentName>ABC</ComponentName>
        <Standard>123</Standard>
        <CaseName>Normal Cold Start</CaseName>
    </CyclicLoading>
    <CyclicLoading>
        <ComponentID>2</ComponentID>
        <ComponentName>DEF</ComponentName>
        <Standard>456</Standard>
        <CaseName>Normal Warm Start</CaseName>
    </CyclicLoading>
    <CyclicLoading>
        <ComponentID>3</ComponentID>
        <ComponentName>GHI</ComponentName>
        <Standard>789</Standard>
        <CaseName>Normal Very Hot Start</CaseName>
    </CyclicLoading>
</DsCyclicLoading>");

var predefined = new[]
{
    "Normal Very Hot Start",
    "Normal Cold Start",
    "Normal Warm Start",
}
    .Select((x, n) => new { x, n })
    .ToDictionary(x => x.x, x => x.n);

var ns = XNamespace.Get("http://tempuri.org/DsCyclicLoading.xsd");

var nodes = xd.Root.Elements().OrderBy(x => predefined[x.Element(ns + "CaseName").Value]).ToArray();

xd.Root.ReplaceNodes(nodes);

Это дает:

<DsCyclicLoading xmlns="http://tempuri.org/DsCyclicLoading.xsd">
  <CyclicLoading>
    <ComponentID>3</ComponentID>
    <ComponentName>GHI</ComponentName>
    <Standard>789</Standard>
    <CaseName>Normal Very Hot Start</CaseName>
  </CyclicLoading>
  <CyclicLoading>
    <ComponentID>1</ComponentID>
    <ComponentName>ABC</ComponentName>
    <Standard>123</Standard>
    <CaseName>Normal Cold Start</CaseName>
  </CyclicLoading>
  <CyclicLoading>
    <ComponentID>2</ComponentID>
    <ComponentName>DEF</ComponentName>
    <Standard>456</Standard>
    <CaseName>Normal Warm Start</CaseName>
  </CyclicLoading>
</DsCyclicLoading>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...