【发布时间】:2019-03-15 09:21:14
【问题描述】:
最近,我了解了Clark notation 在 XML 中的含义。如果 XML 看起来像这样:
<srw:searchRetrieveResponse
xmlns:srw="http://www.loc.gov/zing/srw/"
...
<srw:record>
...
<dc:title>The C programming language</dc:title>
...
</srw:record>
在 Python 中使用lxml,可以这样解析:
record_title = r.find('.//{http://purl.org/dc/elements/1.1/}title')
.//{namespace uri}tag name 的构造对我来说是新的。我认为它对您不熟悉的数据集非常有用,因为您只需要知道名称空间 uri(位于 XML 标头中)、前缀和标签名称即可找到它。因此,您无需了解 XML 树的方式。
现在,我通常使用浏览器为 XML 编写 XSL:只需在示例 XML 文件的顶部指定 XSL 表,双击它,浏览器就会显示 XSL 是由它构成的。那么我可以在 XSL/XSLT 中使用 Clark 表示法吗?据我所知,答案是否定的。一些谷歌搜索让我找到了支持它的 PHP 和 Perl 库,但显然 XSLT 不支持。
我错过了什么吗?如果我不支持,那么 XSLT 不支持它的原因可能是什么?
【问题讨论】:
-
lxml方法确实简化了事情。但是,请注意r.findwill only return the first matching element。您至少需要知道文件中存在多少匹配元素,以及您想要哪一个。 -
是的,我知道。我简化了代码以仅显示符号。完整版代码遍历所有
records,其中每个record只有一个title。