XSLT 匹配 xhtml 命名空间

问题描述 投票:0回答:1

美好的一天,

我正在尝试使用以下命令行将 html 文件生成的 xhtml 文件中的“head”元素与 HTML tidy 标记校正器进行匹配:

tidy -asxml -output test_tidy.html --numeric-entities yes .\test.html

test_tidy.html 包含以下 xmlns 命名空间:

 <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>

这个 XSLT 模板匹配对我不起作用:

<xsl:template match="//head">

我错过了什么? 理想情况下,我想使用相同的样式表来处理带有或不带有 xmlns 命名空间声明的 XHTML 文件,例如处理此文件:

 <!DOCTYPE html>
        <html>
               <head>

感谢您的帮助。

最美好的祝愿!

xslt xhtml xml-namespaces
1个回答
0
投票

如果您希望相同的模板匹配两者中的

head
元素:

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>

和:

<html>
     <head>

你必须制作你的模板:

<xsl:template match="x:head|head">

宣布后

xmlns:x="http://www.w3.org/1999/xhtml


或者,你可以这样做:

<xsl:template match="*[local-name()='head']">

或(在 XSLT 2.0 或更高版本中):

<xsl:template match="*:head">

但这通常不是一个好的做法,因为(至少在理论上),其他命名空间中可能存在您不希望匹配的其他

head
元素。

© www.soinside.com 2019 - 2024. All rights reserved.