Как создают XML из XML, использующего XSL?

Предложение зависит от Вашего приложения и Вашей цели.

я записал интеграционные тесты в JUnit, но я также видел, что люди используют HtmlUnit (расширение JUnit), Селен, Watir, Соответствие/Фитнес и даже коммерческие инструменты как WinRunner и Шелк.

Так говорят нам немного больше о Вашем домене и целях Ваших тестов, и можно, вероятно, получить лучший ответ.

12
задан Joel Coehoorn 1 December 2011 в 19:44
поделиться

3 ответа

Вы также можете добавить директиву вывода в свою таблицу стилей:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes"/>

<xsl:template match="/Address">
  <Address>
    <FirstName><xsl:value-of select="name" /></FirstName>
    <LastName><xsl:value-of select="lastname" /></LastName>
  </Address>
</xsl:template>

</xsl:stylesheet>

Это приведет к тому, что вывод будет иметь начальное объявление xml:

<?xml version="1.0" ?>
17
ответ дан 2 December 2019 в 03:54
поделиться

Проблема в том, что "/" является корневым , а не корневым элементом (или "элементом документа") .
Иерархически "/" находится на один уровень выше элемента документа (

в вашем случае). Итак, это:

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

  <xsl:template match="/Address">
    <Address>
      <FirstName><xsl:value-of select="name" /></FirstName>
      <LastName><xsl:value-of select="lastname" /></LastName>
    </Address>
  </xsl:template>
</xsl:stylesheet>

действительно будет работать. Обратите внимание на небольшую разницу? Лучше было бы это:

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

  <!-- the identity template (copies your input verbatim) -->
  <xsl:template match="node() | @*">
    <xsl:copy>
      <xsl:apply-templates select="node() | @*" />
    </xsl:copy>
  </xsl:template>

  <!-- special templates only for things that need them -->
  <xsl:template match="name">
    <FirstName><xsl:value-of select="." /></FirstName>
  </xsl:template>

  <xsl:template match="lastname">
    <LastName><xsl:value-of select="." /></LastName>
  </xsl:template>

</xsl:stylesheet>
17
ответ дан 2 December 2019 в 03:54
поделиться

Просто чтобы немного расширить и уточнить то, что написал Томалак: корень XML-документа находится в иерархии DOM над элементом верхнего уровня . Исключительно часто можно увидеть, как эти двое путают. Рассмотрим этот XML-документ:

<!-- This is a node - yes, comments are nodes.  -->
<root>
   <child/>
</root>
<!-- This is also a node.  -->

Корень этого документа имеет три дочерних узла: узел комментария, узел элемента и еще один узел комментария. Элемент верхнего уровня называется root , потому что это то, что делает каждый, кто создает документы экземпляра XML, чтобы сохранить путаницу между корнем документа и элементом верхнего уровня. (Особенно, если они все еще находятся на той стадии своего обучения XML, где они используют «узел», имея в виду «элемент».)

Это подводит нас к одной из причин того, что шаблон, который Томалак описывает как «более приятный». лучше. Если вы расширите преобразование идентичности, единственное, что XSLT изменит в вашем документе, - это элементы, для которых вы создали шаблоны. Все остальные узлы в документе копируются без изменений. Поэтому, если ваш входной документ содержит комментарии вокруг элемента верхнего уровня, как в приведенном выше примере, они не будут удалены из выходных данных, как если бы вы просто реализовали шаблон, соответствующий элементу Address . .

Конечно, если вы хотите, чтобы ваш вывод исключал комментарии, это тоже легко сделать; просто не выполняйте преобразование идентичности.

Поэтому, если ваш входной документ содержит комментарии вокруг элемента верхнего уровня, как в приведенном выше примере, они не будут удалены из выходных данных, как если бы вы просто реализовали шаблон, соответствующий элементу Address . .

Конечно, если вы хотите, чтобы вывод не содержал комментариев, это тоже легко сделать; просто не выполняйте преобразование идентичности.

Поэтому, если ваш входной документ содержит комментарии вокруг элемента верхнего уровня, как в приведенном выше примере, они не будут удалены из выходных данных, как если бы вы просто реализовали шаблон, соответствующий элементу Address . .

Конечно, если вы хотите, чтобы вывод не содержал комментариев, это тоже легко сделать; просто не выполняйте преобразование идентичности.

4
ответ дан 2 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: