Xml 在XSLT中处理名称空间和变量

Xml 在XSLT中处理名称空间和变量,xml,variables,xslt,namespaces,Xml,Variables,Xslt,Namespaces,我有一个如下所示的xml文件。为简洁起见,我没有完整地列出它 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <OBJECTS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.example.com

我有一个如下所示的xml文件。为简洁起见,我没有完整地列出它

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<OBJECTS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
         xmlns="http://www.example.com/"
         xsi:schemaLocation=".\\intermediate\\example.xsd">
   <OBJECT>
      <abbreviation>ABCD</abbreviation>
      <LINKS>
      ....

如果我删除XML文件中的名称空间,我就会得到它。问题出在哪里?

不是100%确定您想要实现什么,但我注意到您没有在子选择器中使用
t:
前缀,因此我建议使用

<xsl:variable name="objs" select ="t:OBJECTS/t:OBJECT"/>

而不是

<xsl:variable name="objs" select ="t:OBJECTS/OBJECT"/>

无法100%确定您想要实现什么,但我注意到您没有在子选择器中使用
t:
前缀,因此我建议使用

<xsl:variable name="objs" select ="t:OBJECTS/t:OBJECT"/>

而不是

<xsl:variable name="objs" select ="t:OBJECTS/OBJECT"/>


这是正确的。默认名称空间(没有前缀)是继承的,因此
对象
与其父对象位于同一名称空间中。它工作得非常好。我的目标是使用单个xslt处理来自多个名称空间的多个xml文档。到目前为止,我取得了部分成功,非常感谢你在很短的时间内给出了精确的指针。这是正确的。默认名称空间(没有前缀)是继承的,因此
对象
与其父对象位于同一名称空间中。它工作得非常好。我的目标是使用单个xslt处理来自多个名称空间的多个xml文档。到目前为止,我取得了部分成功,非常感谢你在很短的时间内给出了准确的指针。