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>
我愿意使用 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>