XSLT的基础学习心得

Python中读到了关于这方面的代码,很是疑惑,这里学习记录一下:

etree.XSLT(EXtensible Stylesheet Language Transformations)

用于提取xml文件中的信息。多用于爬虫什么的,能耐挺大,但是需要一些学习成本。详细教程请看。

个人心得

怎么使用我就不介绍了,自己学的也不怎么样,这里记录一下自己遇到的一些用法:
.xslt:

该文件就是具体的规则文件。部分节点的含义:

<xsl:with-param> 元素定义了传递给模板的参数的值。
<xsl:call-template> 元素可调用一个指定的模板。
XSLT <xsl:choose> 元素用于结合 <xsl:when> 和 <xsl:otherwise> 来表达多重条件测试。
<xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。

xlst相当于一个匹配规则文件,其中含有层层调用的关系。复杂的xslt文件中的template类似于函数,可以调用该函数,达到复用。

其中如果使用了$,@要了解,$是引用在.xslt中定义的参数,而@则是引用对应要解析的xml文件中的参数。

这里还可以使用如

<xsl:value-of select="ns:Func()"/>

以上是调用了函数,可以在其中添加参数,然后在Python中就可以定义当匹配到该操作时调用的函数。

 

.py:

from lxml import etree

首先可以定义一个类:

class Factory:
    ...
    def func():
    ...

也可以继承一个分解器做其他处理:

class LibraryResolver(etree.Resolver):
    ...

    def resolve(self, url, pubid, context):
    ...

然后就可以使用了:

factory = VariablesInfosFactory()

#定义分解器
parser = etree.XMLParser()
parser.resolvers.add(LibraryResolver())

#name_ns对应的是xmlns:ns=XXX的名称,是<xsl:stylesheet中的属性
tree = etree.XSLT(
            etree.parse(os.path.join("XXX.xslt"), parser),
            extensions = {("name_ns", name): getattr(factory, name)
                for name in ["func"]})

#treeItem为etree.fromstring()的返回类型,对应的是xml文件中对应的一个节点。XXX是在.xslt文件中定义的参数,可以从Python代码端传递进去。
tree(treeItem,XXX=etree.XSLT.strparam(str(XXX)))

这样就可以从xml文件中使用如递归等方式来获取数据,代码量十分精简,就是学习成本较高!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值