Это мой ввод XML.
<package version="2.0" unique-identifier="uuid_id" xmlns="http://www.idpf.org/2007/opf"> <metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:calibre="http://calibre.kovidgoyal.net/2009/metadata" xmlns:dc="http://purl.org/dc/elements/1.1/"> <meta name="calibre:series_index" content="1"/> <dc:language>UND</dc:language> <dc:creator opf:file-as="Marquez, Gabriel Garcia" opf:role="aut" >Gabriel Garcia Marquez</dc:creator> <meta name="calibre:timestamp" content="2010-07-14T21:35:15.266000+00:00"/> <dc:title>Cem Anos de Solidão</dc:title> <meta name="cover" content="cover"/> <dc:date>2010-07-14T21:35:15.266000+00:00</dc:date> <dc:contributor opf:role="bkp" >calibre (0.7.4) [http://calibre-ebook.com]</dc:contributor> <dc:identifier id="uuid_id" opf:scheme="uuid" >7e11dc8b-55cb-4411-8f30-df974fbcf58a</dc:identifier> </metadata> <manifest> </package>
и мой xslt начинается как ..
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml"> <xsl:template match="package"> <xsl:message>Entering package</xsl:message> </xsl:template>
Я использую XSLT 1.0, и пакет шаблонов не соответствует. Когда я удаляю пространство имен xmlns="http://www.idpf.org/2007/opf" в узле пакета, шаблон сопоставляется. Как сделать так, чтобы мой шаблон соответствовал без удаления пространств имен.
XSLT 1.0
xmlns="http://www.idpf.org/2007/opf"
Пожалуйста, помогите мне. Заранее спасибо.
Добавьте пространства имен в таблицу стилей.
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:opf="http://www.idpf.org/2007/opf"> <xsl:template match="opf:package"> <xsl:message>Entering package</xsl:message> </xsl:template>
Попробуйте это игнорировать пространство имен:
<xsl:template match="*[local-name()='package']"> <xsl:message>Entering package</xsl:message> </xsl:template>
XSLT понимает пространства имен QNames, которые определены во входном XML.
В дополнение к вышеприведенному ответу мы можем дать любое имя нашему пространству имен xsl.
Входной xml имеет определение xmlns: dc = "http://purl.org/dc/elements/1.1/" и элементы определены как префикс dc
Вы можете определить таблицу стилей ниже:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:purl="http://purl.org/dc/elements/1.1/" xmlns:idpf="http://www.idpf.org/2007/opf"> <xsl:template match="idpf:package/purl:language"> <xsl:message>Entering package. Selected Language.</xsl:message> </xsl:template>