Специальное требование для форматирования статьи XML - PullRequest
0 голосов
/ 26 марта 2012

Мой клиент запрашивает что-то особенное. Давайте возьмем следующий XML в качестве примера:

<?xml version="1.0"?>
<article>
  <paragraph>
    <w p='0'>This</w>
    <w p='1'>is</w>
    <w p='2'>the</w>
    <w p='3'>first</w>
    <w p='4'>paragraph</w>
    <w p='p'>.</w>
  </paragraph>
  <paragraph>
    <w p='0'>This</w>
    <w p='1'>is</w>
    <w p='2'>the</w>
    <w p='3'>second</w>
    <w p='4'>paragraph</w>
    <w p='p'>.</w>
  </paragraph>
</article>

Мой клиент хочет "сложить" все слова, но не тот, который мы, технические ребята, имеем в виду. Они хотят скрыть информацию об узле слова, кроме самого слова, поэтому после значения слова «сворачивание» оно должно выглядеть так:

<?xml version="1.0"?>
<article>
  <paragraph>This is the first paragraph.</paragraph>
  <paragraph>This is the second paragraph.</paragraph>
</article>

То, о чем я говорю, это просто внешний вид, а не основной контент, который не должен изменяться посредством этого свертывания. (РЕДАКТИРОВАТЬ) Однако пользователь все еще может выбрать слово и изменить его атрибут или само слово (каким-либо образом через интерфейс приложения),

У меня вопрос: есть ли готовые библиотеки (я использую C #) или приложения, специализирующиеся на таких требованиях?

Спасибо.

Peter

1 Ответ

1 голос
/ 26 марта 2012

В этом требовании нет ничего особенного.Это обычная обработка, которая выполняется с использованием XSLT тысячи раз в день.

Трудно вывести правила преобразования из вашего примера, в частности, точно зная, где следует вставлять пробелы.Вы вставили пробел перед каждым словом, кроме первого и того, которое содержит «.».Если это действительно правило, то ваше преобразование будет выглядеть так:

<xsl:transform match="paragraph">
 <paragraph><xsl:apply-templates/></paragraph>
</xsl:transform>

<xsl:template match="w[1]" priority="3">
  <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="w[.='.']" priority="2">
  <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="w" priority="1">
  <xsl:value-of select="concat(' ', .)"/>
</xsl:template>

На практике вам могут понадобиться дополнительные правила для других вещей, которые встречаются в ваших данных.

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