XML 使用 XSLT 进行空前缀转换

XML with empty prefix transformation with XSLT

我愿意使用 XSLT 通过删除 (TextLine) 元素将 XML 文件转换为其他 XML 文件。但是,元素并没有像我预期的那样在输出 XML 文件中被删除。我想我必须修改 XSLT 文件,但我不知道如何修改。让我知道应该做什么。

我怀疑问题的根本原因是 XML 文件中的元素有一个空的前缀命名空间。

具体如下。

包含空前缀命名空间元素的 XML test-01.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<alto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://www.loc.gov/standards/alto/ns-v4#"
      xsi:schemaLocation="http://www.loc.gov/standards/alto/ns-v4# http://www.loc.gov/standards/alto/v4/alto-4-2.xsd">
    <TextLine TAGREFS="LT9"/>
    <TextLine TAGREFS="LT10"/>
    <TextLine TAGREFS="LT9"/>
    <TextLine TAGREFS="LT8"/>
</alto>

我正在使用以下 date.xslt 文件:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="TextLine"/>

</xsl:stylesheet>

注意:我正在使用 python lxml 来执行转换。但是,这不应该对过程有任何影响,因为我可以使用任何其他 XML 转换器作为 xsltproc.

是的。您认为默认命名空间是导致 XSLT 无法按预期运行的原因的假设是正确的。试试这个 XSLT-1.0:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:loc="http://www.loc.gov/standards/alto/ns-v4#">
    <xsl:output method="xml" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="loc:TextLine"/>

</xsl:stylesheet>