Сортировать XML с C # перед записью - PullRequest
0 голосов
/ 25 июня 2009

У меня есть XML-документ, который я создаю, используя цикл ниже, и средство записи XML из C #. В настоящее время он работает нормально, но я хотел реализовать решение, при котором каждый раз, когда пишется XML, он автоматически сортирует его по возрастанию, используя поле driveStart. Я знаю, что люди говорят, что вы должны делать это в XSLT, но мне трудно найти хороший пример для подражания. У кого-нибудь есть опыт в этом, что я могу использовать? Любая помощь очень благодарна.

XmlDocument doc = new XmlDocument();
XmlElement rn = doc.CreateElement("DriveLayout");
XmlElement dn = null;
XmlAttribute xa, xa1, xa2, xa3, xa4, xa5, xa6;
doc.AppendChild(rn);

foreach (GridItem item in this.fileSystemGrid.Items)
{
  dn = doc.CreateElement("Drive");
  xa = doc.CreateAttribute("driveTime");
  xa.Value = item["DriveTime"].ToString();
  xa1 = doc.CreateAttribute("driveStart");
  xa1.Value = item["DriveStart"].ToString();
  xa2 = doc.CreateAttribute("driveEnd");
  xa2.Value = item["DriveEnd"].ToString();
}

dn.SetAttributeNode(xa);
dn.SetAttributeNode(xa1);
dn.SetAttributeNode(xa2);
rn.AppendChild(dn);

return doc.InnerXml;

Ответы [ 3 ]

3 голосов
/ 25 июня 2009

Сортируйте свою коллекцию по DriveStart перед использованием модуля записи XML.

1 голос
/ 25 июня 2009

Интересно, почему вы не не создаете свой XML в сортированном виде с самого начала. Это будет проще и эффективнее, особенно если учесть, что вы новичок в XSL.

Во всяком случае, ради удовольствия & mdash; при условии, что ваш XML выглядит следующим образом:

<DriveLayout>
  <Drive driveTime="somevalue" driveStart="somevalue" driveEnd="somevalue" />
  <Drive driveTime="somevalue" driveStart="somevalue" driveEnd="somevalue" />
  <Drive driveTime="somevalue" driveStart="somevalue" driveEnd="somevalue" />
</DriveLayout>

Тогда для сортировки потребуется таблица стилей XSLT 1.0:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="DriveLayout">
    <xsl:copy>
      <xsl:apply-templates select="Drive">
        <xsl:sort select="@driveTime" />
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Drive">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

В .NET вы должны использовать класс XslCompiledTransform, чтобы внести изменения в ваш документ. На связанной странице MSDN достаточно материала для начала работы.

0 голосов
/ 25 июня 2009

Почему вы хотите отсортировать это? Как это будет использоваться? Обычно XML - это просто данные, и они не сортируются просто для того, чтобы они выглядели красиво.

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