我在XML中使用xsl:stylesheet
处理指令。无论如何使用XPath选择此PI?如果是这样的话?
答案 0 :(得分:7)
使用processing-instruction()
node-test。
答案 1 :(得分:5)
通常,可以使用processing-instruction()
节点测试选择处理指令。
更具体地说,可以包含所需PI节点的名称(目标)作为参数。
使用强>:
/processing-instruction('xml-stylesheet')
这将选择在全局级别定义的名称为xsl-stylesheet
的任何处理指令(是顶部元素的兄弟)。
请注意,xsl:stylesheet
是PI的PI目标无效。冒号':'
用于从本地名称分隔名称空间前缀 - 但是处理指令 target 不能属于名称空间。根据 W3c XPath Specification :
" 处理指令有扩展名:本地部分是处理指令的目标;名称空间URI为空。"
同样根据W3C文档: "Associating Style Sheets with XML documents 1.0 ",将样式表与XML文档相关联的PI的目标必须是:"xml-stylesheet"
- 不是"xsl:stylesheet"
或"xsl-stylesheet"
。
以下是完整示例:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="/processing-instruction('xml-stylesheet')"/>
</xsl:template>
</xsl:stylesheet>
对以下XML文档应用此转换时:
<?xml-stylesheet type="text/xsl" href="test"?>
<Books>
<Book name="MyBook" />
</Books>
评估XPath表达式并输出选定的PI节点:
<?xml-stylesheet type="text/xsl" href="test"?>
答案 2 :(得分:0)
处理指令包括两部分目标和数据,语法为:
<?target data?>
如果您使用:
<xsl:value-of select="/processing-instruction('xml-stylesheet')" />
它只返回数据部分,在Dimitre Novatchev的例子中,它返回:
type="text/xsl" href="test"
因此处理指令的字符串值是数据部分。评估select <xsl:value-of
的表达式,并将结果对象转换为字符串,就像对string()
函数的隐式调用一样。