Я пытаюсь отформатировать отчет в формате PDF при использовании apache fop, и я нашел поведение, которое я не могу понять.xsl: поведение совпадения шаблонов с и без пространства имен
При попытке отладить проблему, я отследил ее до поведения xsl директивы соответствия xsl: template, с и без пространства имен, объявленного в xml-файле.
Поведение xsl одинаково, даже если я использую другую имплантацию (xsltproc), поэтому разница должна быть в спецификации xsl, и она не связана с apache fop, но я не смог найти объяснения, поэтому я будут очень благодарны, если кто-то может мне помочь.
Вот код. FIrst файл "bugger.xml":
<?xml version="1.0" encoding="UTF-8" ?>
<parent xmlns="http://www.bugger.org">parent_value</parent>
А вот "bugger.xsl" Файл:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
OK, root element matches...
<xsl:apply-templates />
</xsl:template>
<xsl:template match="/*">
you WILL see this writing... I'm a parent tag, look: I'm a "<xsl:value-of select="name()"/>", why you cannot see me in the /parent template match?
The naming match fails because of the xmlns directive in the bugger.xml file. If you remove it, all works fine.
</xsl:template>
<xsl:template match="/parent">
you will NOT see this writing, while you should see it...
</xsl:template>
</xsl:stylesheet>
Возникает вопрос: почему, если я помещаю Xmlns = "HTTP: // www.bugger.org ", шаблон xsl: template соответствует«/* », и если я его удалю, шаблон xsl: соответствует«/parent »?
Спасибо за помощь!
Спасибо вам обоим michael.hor257k и Тони Грэхем. Я старательно предпочитаю ответ Тони, потому что он дает немного больше контекста, но оба ответа обогатили мои знания. – arzillo
На самом деле, я уже понял, что проблема была в пространстве имен, но мне не хватало xmlns: b = "http://www.bugger.org", а затем b: parent, который Тони включил в свой ответ. Гоша, ребята, вы очень круты, спасибо снова !!! – arzillo