gpt4 book ai didi

xml - XSLT 是否支持 Clark 表示法?

转载 作者:数据小太阳 更新时间:2023-10-29 02:52:45 25 4
gpt4 key购买 nike

最近,我学到了什么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>

lxml在 Python 中,你可以这样解析它:

record_title = r.find('.//{http://purl.org/dc/elements/1.1/}title')

构造 .//{namespace uri}tag name 对我来说是新的。我认为这对于您不熟悉的数据集非常有用,因为您只需要知道 namespace uri(位于 XML header 中)、前缀和标签名称即可找到它。因此,您无需了解 XML 树。

现在,我通常使用浏览器为 XML 编写 XSL:只需在示例 XML 文件的顶部指定 XSL 表,双击它,浏览器就会显示 XSL 的内容。那么我可以在 XSL/XSLT 中使用 Clark 表示法吗?据我所知,答案是否定的。一些谷歌搜索让我找到了支持它的 PHP 和 Perl 库,但显然,XSLT 不支持。

我错过了什么吗?如果我不支持,那么 XSLT 不支持它的原因可能是什么?

最佳答案

好吧,任何 XSLT/XPath 版本 ( https://www.w3.org/TR/xpath-10/#path-abbrev ) 都支持像 .// 这样的路径,或者更确切地说,以 .// 开头的路径。

对于基于 Clark 表示法的标准化支持,您需要求助于 XPath/XSLT 3 https://www.w3.org/TR/xpath-31/#doc-xpath31-URIQualifiedName它作为 Q{http://example.com}foo 在命名空间 http://example.com 中选择具有本地名称 foo 的元素

当然,那个语法和你的语法都不使用任何前缀,它直接使用 namespace 而不是任何前缀。使用前缀,例如pf:foo 在任何版本的 XSLT/XPath 中都受支持,在 XSLT 中,您只需确保样式表将前缀与例如绑定(bind)。 xmlns:pf="http://example.com" 到正确的命名空间,使用 XPath 取决于特定的 API 是否以及如何执行此操作。

这是一个基于您的输入的示例,用于显示 XSLT 3 中的一些选项:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">

<xsl:output indent="yes"/>

<xsl:template match="/">
<four-ways-to-select>
<enhanced-qname>
<xsl:copy-of select="//Q{http://purl.org/dc/elements/1.1/}title"/>
</enhanced-qname>
<namespace-declaration>
<xsl:copy-of select="//dc:title" xmlns:dc="http://purl.org/dc/elements/1.1/"/>
</namespace-declaration>
<xpath-default-namespace>
<xsl:copy-of select="//title" xpath-default-namespace="http://purl.org/dc/elements/1.1/"/>
</xpath-default-namespace>
<namespace-wildcard>
<xsl:copy-of select="//*:title"/>
</namespace-wildcard>
</four-ways-to-select>
</xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/3NJ38Z2

关于xml - XSLT 是否支持 Clark 表示法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55179239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com