Фид Atom имеет пространство имен Atom, объявленное в корневом элементе без префикса пространства имен.<div/>
и другие элементы XHTML наследуют пространство имен Atom, поскольку они не имеют явно объявленного пространства имен XHTML.
Если вы хотите, чтобы элементы XHTML были связаны с пространством имен XHTML, вам необходимо изменить<div>
в фиде Atom должно быть:
<div xmlns:xhtml="http://www.w3.org/1999/xhtml" class="byline">By Sheila F. Buckmaster</div>
или:
<xhtml:div class="byline">By Sheila F. Buckmaster</xhtml:div>
Если вы сохраните фид Atom таким же и по-прежнему хотите создавать элементы XHTML, то вам потребуетсянастроить таблицу стилей так, чтобы она соответствовала AP:div
, а затем создать элементы XHTML в выходных данных.
Например, изменив таблицу стилей I apply-templates
для сопоставленного AP:div
в режиме с именем xhtml
.В любом режиме в этом режиме есть сопоставление с шаблоном (поэтому оно также будет работать для AP:h2
), которое создает элементы XHTML, используя local-name()
соответствующего элемента.
<?xml version="1.0" encoding="UTF-8"?>
<xslt:stylesheet version="1.0" xmlns:xslt="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="urn:my-scripts"
xmlns:x="http://www.w3.org/1999/xhtml"
xmlns:AP="http://www.w3.org/2005/Atom"
exclude-result-prefixes="xslt msxsl user">
<xslt:output method="xml" indent="yes"/>
<xslt:template match="/">
<xslt:apply-templates select="/AP:feed//AP:entry"/>
</xslt:template>
<xslt:template match="AP:entry">
<xslt:text>Hello from entry</xslt:text>
<xslt:apply-templates select="AP:content"/>
</xslt:template>
<xslt:template match="AP:content">
<xslt:text>Hello from content</xslt:text>
<xslt:apply-templates select="AP:div[@class='byline']"/>
</xslt:template>
<xslt:template match="AP:div[@class='byline']">
<xslt:apply-templates select="." mode="xhtml"/>
</xslt:template>
<!--create an XHTML element with the same name as the context element -->
<xslt:template match="*" mode="xhtml">
<xslt:element name="{local-name()}" namespace="http://www.w3.org/1999/xhtml">
<xslt:apply-templates select="@*|node()" mode="xhtml"/>
</xslt:element>
</xslt:template>
<!--attributes, comments, and processing-instructions simply copied -->
<xslt:template match="@*|text()|comment()|processing-instruction()">
<xslt:copy-of select="."/>
</xslt:template>
</xslt:stylesheet>