使用 XSLT 进行空前缀转换的 XML [重复]
Posted
技术标签:
【中文标题】使用 XSLT 进行空前缀转换的 XML [重复]【英文标题】:XML with empty prefix transformation with XSLT [duplicate] 【发布时间】:2021-09-19 17:35:27 【问题描述】:我愿意使用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
。
【问题讨论】:
【参考方案1】:是的。您认为默认名称空间是 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 进行空前缀转换的 XML [重复]的主要内容,如果未能解决你的问题,请参考以下文章
XML 文件中的 XML 模式声明破坏了 XSLT 转换 [重复]