XSLT 中id()函数理解.

可以通过给XML源文件中的元素设置唯一的ID属性值,然后通过XSLT来进行定位.主要用到的是id()这个函数.

该函数可以通过传入一个参数来指定对应ID的值,也可以传入可选的第二参数来制定对应的源数据.

如:id('a',$source) 表示的在$source XML数据源中寻找对应的ID属性值为'a'的元素.

可以通过三种方式为XML数据源设置对应的元素ID.

A.对于内嵌DTD的XML数据源,可以在DTD中指定元素的某个属性为ID类型.

B.可以设置元素的xml:id属性

C.对于通过XSD来校验有效性的XML数据源,可以在XSD-Schema文件中指定某个元素的类型为xs:ID类型.

现使用的XSLT解析器是:Saxon-HE版本.可能是解析器问题,第三种方式尝试了总实现不了.

以下就A B两种方式给出示例.

A.对于内嵌DTD的XML数据源,可以在DTD中指定元素的某个属性为ID类型.

数据源:test-A.xml

<?xml version="1.0" encoding="GB2312" standalone="yes"?>

<!DOCTYPE test [
	<!ELEMENT test (value*)>
	<!ELEMENT value (#PCDATA)>
	<!ATTLIST value id ID #REQUIRED><!-- DTD中声明在test元素中存在名为id的属性值,并且该类型为ID -->
	<!ATTLIST test id ID #REQUIRED><!-- DTD中声明在value元素中存在名为id的属性值,并且该类型为ID -->
]>

<test id="test">
	<value id="value1">1</value>
	<value id="value2">2</value>
	<value id="value3">3</value>
	<value id="value4">4</value>
	<value id="value5">5</value>
	<value id="value6">6</value>
</test>

XSLT文件:test-A.xslt

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet version="2.0"
				xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output indent="yes"/>
	<xsl:template match="/">
		<xsl:copy-of select="id('value2')"/>
	</xsl:template>
</xsl:stylesheet>


执行后结果为:

<?xml version="1.0" encoding="UTF-8"?>
<value id="value2">2</value>


B.可以设置元素的xml:id属性

数据源:test-B.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet href="test.xslt" type="text/xsl"?>
<test xml:id="test" xmlns="http://www.ricky.com/test">
	<value xml:id="value1">1</value>
	<value xml:id="value2">2</value>
	<value xml:id="value3">3</value>
	<value xml:id="value4">4</value>
	<value xml:id="value5">5</value>
	<value xml:id="value6">6</value>
</test>

XSLT文件:test-B.xslt

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet version="2.0"
				xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output indent="yes"/>
	<xsl:template match="/">
		<xsl:copy-of select="id('value5')"/>
	</xsl:template>
</xsl:stylesheet>

执行后结果

<?xml version="1.0" encoding="UTF-8"?>
<value xmlns="http://www.ricky.com/test" xml:id="value5">5</value>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值