XSLT中用生成处理指令,而非创建该标签本身;支持静态name属性、动态表达式及隐式target,输出位置受限且target不可为xml。

在XSLT中生成处理指令(Processing Instruction,简称PI),不能直接用 标签来“创建”一个名为 xsl:processing-instruction 的元素——因为 xsl:processing-instruction 本身是XSLT的一个**指令元素**,用于在输出中插入任意处理指令(比如 ),而不是生成它自己。
正确用法:用 输出处理指令
是XSLT内置的指令,作用是在结果文档中生成一条处理指令(PI),例如 XML 声明之后的样式表关联、自定义 PI 等。它的名字(即 PI 的 target)通过属性或内容指定,内容作为 PI 的 data 部分。
常见写法:
-
静态写法(固定 target 和 data):
type="text/xsl" href="style.xsl"
→ 输出: -
动态 target(用
name属性 + 表达式):{@pi-data}
前提是源XML中有pi-target和pi-data属性,例如 -
不带 name 属性时,用第一个子文本节点作 target:
php echo "hello";
→ 输出:(注意:target 是php,data 是后面部分)
不能生成 这个标签本身
是 XSLT 指令,只在样式表中使用,不会出现在输出结果里。如果你想在输出中“显示”或“输出”这段文字(比如用于文档示例),必须把它当作普通文本转义输出:
- 用
+ 手动转义:zuojiankuohaophpcnxsl:processing-instruction name="foo"youjiankuohaophpcnbarzuojiankuohaophpcn/xsl:processing-instructionyoujiankuohaophpcn - 或借助
复制预定义的文本节点(更安全)
注意事项
- 处理指令只能出现在 XML 文档的根节点下(即 document node 后、根元素前),或元素内容中(但不能在属性值或注释里);XSLT 引擎通常会自动校验位置,错误位置可能被忽略或报错
- target 名不能是
xml(大小写敏感),这是 XML 规范保留的(如是声明,不是 PI) - 如果 data 中含
?>,需确保不提前结束 PI;XSLT 处理器一般会自动转义,但手写字符串时要留意
基本上就这些。核心记清楚: 是“生成 PI 的工具”,不是“被生成的对象”。










