XSLT怎么生成处理指令 xsl:processing-instruction

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-targetpi-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 的工具”,不是“被生成的对象”。