Как получить имя тега корневого элемента в XML-документе w/XSLT?

истинное время выполнения

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

  • Является ли этот фрагмент кода интерпретированным JIT-компилятором C1 или C2. Обратите внимание, что существует не только три варианта. Если вы вызываете один метод из другого, один из них может быть интерпретирован, а другой может быть скомпилирован C2.
  • Для компилятора C2: как этот код был выполнен ранее, так что в профиле ветви и типа.
  • Состояние сборщика мусора: прерывает ли это выполнение или нет
  • Очередь компиляции: компилятор JIT компилирует другой код одновременно (что может замедлить работу вниз по исполнению текущего кода)
  • Схема памяти: как объекты расположены в памяти, сколько строк кеша должно быть загружено для доступа ко всем необходимым данным.
  • Состояние предсказания ветвления CPU который зависит от предыдущего исполнения кода и может увеличивать или уменьшать количество ошибочных предсказаний филиала.

И так далее и т. д. Поэтому, даже если вы измеряете что-то в изолированном контролере, это не означает, что скорость одного и того же кода в процессе производства будет одинаковой. Он может отличаться по порядку величины. Поэтому перед тем, как измерить что-то, вы должны спросить себя, почему вы хотите измерить эту вещь. Обычно вам все равно, как долго выполняется какая-то часть вашей программы. Обычно вам нравится латентность и пропускная способность всей программы. Так что профилируйте всю программу и оптимизируйте самые медленные части. Вероятно, вещь, которую вы измеряете, не самая медленная.

24
задан Dimitre Novatchev 15 December 2008 в 17:59
поделиться

4 ответа

Я думаю, что вы хотите получить имя самого внешнего элемента XML. Это можно сделать, как в следующем примере XSL:

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

  <xsl:variable name="outermostElementName" select="name(/*)" />

  <xsl:template match="/">
    <xsl:value-of select="$outermostElementName"/>
  </xsl:template>
</xsl:stylesheet>

Обратите внимание, что существует небольшая разница в терминологии XPath:

Верх дерева является корневым узлом. (Терминология 1.0) или узел документа (2.0). Это то, что относится к «/». Это не элемент: это родитель самого внешнего элемента (и любые комментарии и инструкции обработки, которые предшествуют или следуют за самым внешним элементом). Корневой узел не имеет имени.

См. http://www.dpawson.co.uk/xsl/sect2/root.html#d9799e301

.
25
ответ дан Dirk Vollmar 28 November 2019 в 23:23
поделиться

Используйте функцию XPath name().

Одно выражение XPath для получения названия вершины (не корень!) элемент:

              name(/*)

имя () функция возвращает полностью определенное название узла, таким образом, для элемента <bar:foo/> строка "bar:foo" будет возвращена.

В случае, если только локальная часть имени требуется (никакой префикс и ":"), тогда функция XPath local-name() должна использоваться.

19
ответ дан Dimitre Novatchev 28 November 2019 в 23:23
поделиться

Разобрался. Имя функции () с параметром * вернет foo.

2
ответ дан Matty 28 November 2019 в 23:23
поделиться
0
ответ дан annakata 28 November 2019 в 23:23
поделиться
Другие вопросы по тегам:

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