gpt4 book ai didi

xml - XSLT 命名空间

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

我有一个关于 XSLT 命名空间的基本问题。
XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="myNamespace" exclude-result-prefixes="x">
<xsl:template match="/">
<newNode>
<xsl:value-of select="x:Node1/x:Node2" />
</newNode>
</xsl:template>
</xsl:stylesheet>

当我将此 XSLT 应用于:

<Node1 xmlns="myNamespace">
<Node2>ValueIWant</Node2>
</Node1>

但是当我将它应用于:

时它没有找到“ValueIWant”
<ns0:Node1 xmlns:ns0="myNamespace">
<Node2>ValueIWant</Node2>
</ns0:Node1>

我觉得我只是缺少对 XSLT namespace 的一些基本理解。非常感谢任何帮助。

最佳答案

在您的第一个输入文件中:

<Node1 xmlns="myNamespace">
<Node2>ValueIWant</Node2>
</Node1>

您在节点 Node1 上定义了默认命名空间。对于 Node1 及其任何子节点(除非/直到您在子节点中重新定义它),空命名空间前缀绑定(bind)到 myNamespace。所以 Node1 和 Node2 都在 myNamespace 中。

在你的第二个输入文件中:

<ns0:Node1 xmlns:ns0="myNamespace">
<Node2>ValueIWant</Node2>
</ns0:Node1>

您正在定义命名空间前缀 ns0 以指向 myNamespace 但您尚未定义默认命名空间。所以 Node1 在命名空间 myNamespace 中,但 Node2 根本不在任何命名空间中。

您的 xpath 表达式 x:Node1/x:Node2(前缀 x 绑定(bind)到 myNamespace)正在寻找带有子节点的元素 Node1命名空间 myNamespace两者 的节点 2。在您的第二个输入文件中,Node2 不在该命名空间中,因此 xpath 表达式不匹配,因此您没有得到 ValueIWant

您可以像这样更正第二个输入文件:

<ns0:Node1 xmlns:ns0="myNamespace">
<ns0:Node2>ValueIWant</ns0:Node2>
</ns0:Node1>

关于xml - XSLT 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21237279/

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