XSLT 1.0 для удаления пробелов - PullRequest
1 голос
/ 15 марта 2019

Мне нужен выходной xml-файл, в котором после удаления элемента guid нет пробелов.

  1. Входной XML-файл, который отформатирован так:

  <FilterDefinition xmlns="com.cisag.sys.tools.bi.obj.FilterDefinition">
    <guid>72312782178912782380210</guid>
    <name>REI0101</name>
    <description>Partner</description>
    <object>com.cisag.app.general.obj.Partner</object>
    <nlsMode>SINGLE_LANGUAGE</nlsMode>
    <dateTimeMode>COMPACT</dateTimeMode>
    <exportTransformationURI/>
    <importTransformationURI/>
    <logLevel>USER</logLevel>
    <logFolder/>
    <authorizationMode>NO_CHECK</authorizationMode>
    <filter>677869876769097980</filter>
  </FilterDefinition>
  1. Теперь я сопоставляю элемент guid вот так:

  <xsl:template match="/">
		<xsl:apply-templates select="$FilterNode/*"/>
  </xsl:template>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="guid"></xsl:template>
  1. Вывод такой. Вместо элемента guid теперь есть пустая строка, которую я не хочу:

  <FilterDefinition xmlns="com.cisag.sys.tools.bi.obj.FilterDefinition">

    <name>REI0101</name>
    <description>Partner</description>
    <object>com.cisag.app.general.obj.Partner</object>
    <nlsMode>SINGLE_LANGUAGE</nlsMode>
    <dateTimeMode>COMPACT</dateTimeMode>
    <exportTransformationURI/>
    <importTransformationURI/>
    <logLevel>USER</logLevel>
    <logFolder/>
    <authorizationMode>NO_CHECK</authorizationMode>    
    <filter>677869876769097980</filter>
  </FilterDefinition>
  1. Желаемый результат:

  <FilterDefinition xmlns="com.cisag.sys.tools.bi.obj.FilterDefinition">
    <name>REI0101</name>
    <description>Partner</description>
    <object>com.cisag.app.general.obj.Partner</object>
    <nlsMode>SINGLE_LANGUAGE</nlsMode>
    <dateTimeMode>COMPACT</dateTimeMode>
    <exportTransformationURI/>
    <importTransformationURI/>
    <logLevel>USER</logLevel>
    <logFolder/>
    <authorizationMode>NO_CHECK</authorizationMode>    
    <filter>677869876769097980</filter>
  </FilterDefinition>

Я думаю, что для получения желаемого результата я также должен соответствовать символам форматирования.

1 Ответ

1 голос
/ 15 марта 2019

Копирование комментариев из @AmrendraKumar и @TimC в качестве ответа: используйте <xsl:strip-space elements="*"/> при обработке ориентированного на данные XML, подобного этому, в котором пробел между элементами не имеет значения.Затем используйте <xsl:output indent="yes"/>, чтобы добавить новые пробелы в вывод, чтобы получить желаемую разметку (или что-то близкое к ней).

...