xml – 有没有办法在XSL转换期间忽略名称空间?

在处理XSL转换的服务器上禁用了命名空间检查(因为编写XSL的人不了解命名空间).我必须对XSL进行更改,但我无法测试它,因为没有定义任何名称空间,即.

代替

<xsl:template match="ns:element[position()=1]">...

它有

<xsl:template match="element[position()=1]">...

所以它与XML中的任何元素都不匹配,因为它们都是使用命名空间限定的.

我无法在服务器上进行测试,因为我无法访问它.修复XSL是没用的,因为必须启用名称空间检查,这将打破所有其他转换.

所以我需要做的是找到一种在XSL转换期间忽略命名空间的方法.我可以访问MSXML,XMLSpy(在这里找不到选项),如果我真的需要,我可以使用C#或类似语言编写代码.

作为最后的手段,我可​​以编写一些正则表达式,但我真的不想走这条路,特别是在处理XML时…

在回复有关更多细节的评论时:

它是一个Windows 2003虚拟服务器,运行一个Methode Servlet实例(www.eidosmedia.com).我不知道这个servlet用于执行XSL转换的技术.他们忽略了命名空间,因为最初编写XSL的人不理解它们,并且没有将它们包含在XSL中.所以现在所有的XSL文件(数百个)都没有名称空间.

将所有这些文件一次性修复可能是一个有趣的挑战,但这不是我现在所需要的(并且由于涉及的测试数量,部门经理无论如何都不会同意它).我想知道的是,是否有可用的工具(或技术)允许我按原样获取这些XSL文件,并使用它们转换相应的XML文档而不考虑命名空间.在我看来,必须存在一个工具,因为编写原始XSL的人必须使用类似的东西来自己测试转换.

您可以执行转换以在“实际”转换之前从输入中删除所有命名空间.但是……我不确定你是否应该这样做.感觉很难看.
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="*">
    <xsl:element name="{local-name()}" >
      <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
  </xsl:template>  

  <xsl:template match="@*">
    <xsl:attribute name="{local-name()}">
      <xsl:value-of select="." />
    </xsl:attribute>
  </xsl:template>  

</xsl:stylesheet>

原始答案:

这是一个选择吗?

<xsl:template match="*[local-name()='element' and position()=1]">...

(正如评论所示 – 它不会)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇