У меня есть этот простой XML-документXPath в пределах XSLT дает различный результат от прямой оценки XPath
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://example.org/attributes">
<record>
<codice_fiscale>IT07654930130</codice_fiscale>
<indirizzo tipo="casa">Viale Carlo Espinasse 5, Como</indirizzo>
</record>
<n:record xmlns:n="http://test.com/records">
<n:codice_fiscale>IT87654770157</n:codice_fiscale>
<n:indirizzo tipo="ufficio">Via Biancospini 20, Messina</n:indirizzo>
</n:record>
<record>
<codice_fiscale>IT471142131</codice_fiscale>
<indirizzo tipo="ufficio">Via Chiasserini 88B, Firenze</indirizzo>
<test>
<nummeroo>01-000-000</nummeroo>
<nummeroo>02-000-000</nummeroo>
</test>
<test>
<nummeroo>03-000-000</nummeroo>
<nummeroo>04-000-000</nummeroo>
</test>
<stuff>other stuff</stuff>
</record>
<things>
<nummero>08-000-000</nummero>
<nummero>09-000-000</nummero>
</things>
</root>
В следующем XSLT 2.0 таблицы стилей должны вывести имена всех элементов, которые имеют по меньшей мере один лист-узел в виде ребенок.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="no" />
<xsl:strip-space elements="*"/>
<xsl:template match="//*[child::*[not(*)]]">
<xsl:value-of select="concat(name(), '
')" />
</xsl:template>
</xsl:stylesheet>
Я использую omit-xml-declaration
и я раздеться алле пропуски, чтобы получить простой текстовый документ. Конкатенация с '
'
дает мне новую строку.
Применительно к упомянутой выше XML документа XSLT дает следующий результат
record
n:record
record
things
Используя выражение XPath 2.0 шаблона внутри таблицы стилей, т.е.
//*[child::*[not(*)]]
в сочетании с именем (), чтобы получить название элемента в виде строки, то есть
//*[child::*[not(*)]]/name()
I получаем следующий результат (с использованием различных редакторов/XPath 2.0 оценщиками)
record
n:record
record
test
test
things
Используя таблицу стилей XSLT 2.0 и непосредственно вычисления выражения XPath 2.0 с редактором урожайности различных результатов!
Я ожидаю, что результаты будут точно такими же. Таблица стилей и прямая оценка xpath //*[child::*[not(*)]]/name()
очень важны и должны обеспечивать одинаковый вывод текста.
Выражение xpath и таблица стилей очень просты, и все же я не могу понять, почему оценка этих двух результатов дает разные результаты.
У кого-нибудь есть идея, почему две оценки дают разные результаты?
Спасибо за полезное объяснение Майкл. Кажется, мне все еще нужно много узнать о xslt. – Newbee