Xml XSLT名称空间

Xml XSLT名称空间,xml,xslt,xml-namespaces,Xml,Xslt,Xml Namespaces,我有一个关于XSLT名称空间的基本问题。 XSLT: 当我将此XSLT应用于: <Node1 xmlns="myNamespace"> <Node2>ValueIWant</Node2> </Node1> <ns0:Node1 xmlns:ns0="myNamespace"> <Node2>ValueIWant</Node2> </ns0:Node1> 价值万特 但当我将其

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


当我将此XSLT应用于:

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

价值万特
但当我将其应用于:
时,它找不到“ValueIWant”

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

价值万特

我觉得我只是缺少对XSLT名称空间的一些基本理解。非常感谢您的帮助。

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

<Node1 xmlns="myNamespace">
    <Node2>ValueIWant</Node2>
</Node1>
<ns0:Node1 xmlns:ns0="myNamespace">
    <Node2>ValueIWant</Node2>
</ns0:Node1>
您正在定义名称空间前缀ns0以指向
myNamespace
,但尚未定义默认名称空间。所以Node1在名称空间
myNamespace
中,但Node2根本不在任何名称空间中

您的xpath表达式
x:Node1/x:Node2
(前缀
x
绑定到
myNamespace
)正在查找在命名空间
myNamespace
中同时具有子节点2的元素Node1。在第二个输入文件中,Node2不在该名称空间中,因此xpath表达式不匹配,因此无法获得
ValueIWant

您可以按如下方式更正第二个输入文件:

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

价值万特

非常感谢您的快速回答。我的印象是名称空间级联到子节点。这是真的吗?是的,在某种程度上是真的。前缀之间的绑定(无论是第一个输入中的空前缀还是第二个输入中的“ns0”)级联到子节点。您不必在Node2上重复xmlns:ns0=“myNamespace”。但是前缀是分开的,因此定义前缀ns0对空前缀的绑定没有任何影响。