小编And*_*rew的帖子

XSLT:如何删除同义名称空间

我有大量需要使用 XSLT 转换的 XML 文件。问题是这些文件中有许多是由不同的人手写的,并且他们没有使用一致的名称来引用模式。例如,一个文件可能使用:

xmlns:itemType="http://example.com/ItemType/XSD"

另一个可能使用前缀“it”而不是“itemType”:

xmlns:it="http://example.com/ItemType/XSD"

如果这还不够糟糕,那么有几个文件对同一事物使用两个或三个同义词!

<?xml version="1.0"?>
<文档
    xmlns:it="http://example.com/ItemType/XSD"
    xmlns:itemType="http://example.com/ItemType/XSD"
    xmlns:ItemType="http://example.com/ItemType/XSD"
    ...

(显然有很多剪切和粘贴正在进行)

现在,因为 XSLT 文件中的模式匹配似乎适用于名称空间前缀(与其相关的模式相反),所以该模式只匹配其中一个变体。所以如果我写这样的东西:

    <xsl:template match="SomeNode[@xsi:type='itemType:SomeType']">
        ...
    </xsl:模板>

然后它只匹配我想要的案例的一个子集。

问题 1:有没有办法让 XSLT 匹配所有变体?

问题 2:有没有办法删除重复项,以便所有输出文件都使用一致的命名?

我天真地尝试使用“命名空间别名”,但我想我误解了它的作用,因为我根本无法让它做任何事情 - 要么匹配所有变体,要么影响输出 XML。

<?xsl:样式表
    版本=“1.0”
    ...
    xmlns:it="http://example.com/ItemType/XSD"
    xmlns:itemType="http://example.com/ItemType/XSD"
    xmlns:ItemType="http://example.com/ItemType/XSD"
    ...

    <xsl:output method="xml" indent="yes"/>
    <xsl:namespace-alias stylesheet-prefix="it" result-prefix="ItemType"/>
    <xsl:namespace-alias stylesheet-prefix="itemType" result-prefix="ItemType"/>

xslt alias namespaces duplicates

5
推荐指数
1
解决办法
1148
查看次数

标签 统计

alias ×1

duplicates ×1

namespaces ×1

xslt ×1