gpt4 book ai didi

xslt - XSL : Ignoring/stripping namespaces in secondary documents

转载 作者:行者123 更新时间:2023-12-04 16:52:49 25 4
gpt4 key购买 nike

我正在编写一个 XSL 模板,它从许多次要来源中提取数据。示例辅助文档如下所示:

<toplevel xmlns:foo1="http://foo1">
<path xmlns="http://foo1">
<mytag>bar</mytag>
</path>
</toplevel>

在 XSL 中,我这样做:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:foo1="http://foo1"
exclude-result-prefixes="foo1">
<xsl:variable name="secondary1" select="document('secondary1.xml')/toplevel"/>
<foo>
<xsl:value-of select="$secondary1//foo1:path/foo1:mytag"/>
</foo>
</xsl:stylesheet>

有很多次要资源,每个资源都使用不同的命名空间,为每个标签添加前缀很乏味,而且无论如何重复都不是正确的做法。有没有办法使用 document() 来剥离导入的节点集的命名空间(或以另一种方式实现相同的效果)?

最佳答案

在 XPath/XSLT 1.0 中,要按名称选择命名空间限定的元素,您必须使用前缀。在 XSLT 2.0 中,您可以使用 xpath-default-namespace功能,它允许您为 XPath 表达式设置默认命名空间,因此您不必再使用前缀。见 XSLT 2.0: xpath-default-namespace更多细节。您可以在样式表中的任何元素上使用此属性,除非被覆盖,否则它对所有后代元素都有效。 (用 xsl 限定它:当你想把它放在一个非 XSLT 元素上时,即一个文字结果元素。)

在 XPath 1.0 中,您还可以笨拙地使用本地名称选择元素,例如 *[local-name() = 'path']/*[local-name() = 'mytag'] .在 XPath 2.0 中,为了更简洁,您可以使用 namespace 通配符,如 *:path/*:mytag , as described here .这是一个有点有争议的补充,因为它似乎鼓励和/或证明您的系统显然正在使用的命名空间的相同可疑使用。

关于xslt - XSL : Ignoring/stripping namespaces in secondary documents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2047812/

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