如何修复SXXP0003:XML 解析器报告的错误:与元素类型关联的属性"dt:dt"的前缀"dt"未绑定"CNDB"



我发现一些文件生成错误消息,现在我想修复这些错误。我如何修复下面的错误?

如果我这样做

mediainfo --Output=XML 7483.MOV >data.xml

然后编辑文件并删除许多不需要产生错误的行,然后

java -jar /opt/local/share/java/saxon9he.jar data.xml test.xsl

我得到错误:

Error on line 2 column 29 of data.xml:
SXXP0003: Error reported by XML parser: The prefix "dt" for attribute "dt:dt" associated
with an element type "CNDB" is not bound.
Transformation failed: Run-time errors were reported

测试。xsl包含:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fmp="http://www.filemaker.com/fmpxmlresult" exclude-result-prefixes="fmp date redirect"
    xmlns:saxon="http://icl.com/saxon"
    xmlns:date="http://www.jclark.com/xt/java/java.util.Date"
    xmlns:redirect="http://xml.apache.org/xalan/redirect"
    xmlns:lxslt="http://xml.apache.org/xslt"
    xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="binary.base64"
    xmlns:xalan="org.apache.xalan.xslt.extension.redirect"
    extension-element-prefixes="saxon xalan redirect dt">
</xsl:stylesheet>

data.xml包含:

<?xml version="1.0" encoding="UTF-8"?>
<CNDB dt:dt="binary.base64">Q00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00W
IUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00WIUNNFiFDTRYhQ00W
IT1NFiE9TRYhPU0WIT1NFiE9TRYhPU0WIT1NFiE9TRYhPU0WIT1NFiE9TRYhPU0WIT1NFiE9TRYhPU0WIT1NFiE9TRYhPU0WIT1NFiE9TRYhPU0WIT1NFiE9</CNDB>

错误信息非常清楚

未绑定与元素类型"CNDB"相关联的属性"dt:dt"的前缀"dt"。

您的输入XML不是名称空间格式良好的,因为CNDB元素有一个名为dt:dt的属性,但在CNDB或其祖先之一上没有xmlns:dt="..."

正如@Ian在他的回答中所写,这个问题是由mediainfo生成无效的XML引起的。这个问题已经报告了,但是由于缺乏具有足够XML技能的开发人员来解决这个问题,这个问题似乎不会很快得到解决。

我现在的"解决方案"是使用sed修复输出,如下所示:

mediainfo --Output=XML 7483.MOV | sed -e 's#<CNDB dt:dt=#<CNDB dt=#g' >data.xml

最新更新