gpt4 book ai didi

xml - 有没有办法在 XSL 转换期间忽略 namespace ?

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:59 25 4
gpt4 key购买 nike

namespace 检查在处理 XSL 转换的服务器上被禁用(因为编写 XSL 的人不理解 namespace )。我必须对 XSL 进行更改,但我无法对其进行测试,因为没有定义任何 namespace 。

代替

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

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

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

我无法在服务器上进行测试,因为我无权访问它。修复 XSL 是没有用的,因为那时必须启用 namespace 检查,这将破坏所有其他转换。

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

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

回应关于更多细节的评论:

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

一次修复所有这些文件可能是一个有趣的挑战,但这不是我现在需要的(并且由于涉及的测试量,部门经理无论如何都不会同意)。我只想知道是否有可用的工具(或技术)允许我按原样使用这些 XSL 文件并使用它们来转换相应的 XML 文档,而无需考虑 namespace 。在我看来,必须存在一种工具,因为编写原始 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]">...

(如评论所示 - 它不会)

关于xml - 有没有办法在 XSL 转换期间忽略 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/630077/

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