在此先感谢任何帮助......
我遇到了对DTD验证失败的XML文件的问题(通过ant xmlvalidate
任务),但XML文档中报告的错误与正在验证的文档的内容不匹配.此外,在Oxygen中打开的相同文件验证没有问题.
报告错误的ant输出示例如下:
[xmlvalidate] /Path/to/file.xml:240:91: Attribute "match_style" with value "ble" must have a value from the list "any all none ".
Run Code Online (Sandbox Code Playgroud)
在目视检查有问题的文件时,第match_style
240行的属性值为all
.对文件的搜索显示该字符串ble
虽然在文档中确实发生了多次(作为table
in标签的子字符串,也enable
作为属性名称),但在第145和328行之间根本不出现.
我尝试过手动编辑XML文件并重新验证.如果我从文件前面删除换行符或其他空格(有时候我添加换行符)而不是报告的错误(不进行其他更改),它偶尔会完全解决问题,然后文件将验证.在其他情况下,它仍然失败,但错误是在文件的下方,并且对更接近新错误的空格的额外编辑将修复事情或者进一步向下移动"错误".我无法辨别任何押韵或理由,这些编辑将修复什么,哪些不会.
只是重复一个重点:有时更改空格并且不进行其他更改会导致文件验证.
我已经在XML文件中搜索了可能会做奇怪事情的隐形和控制字符,但除了花园种类的空白外,还没有找到任何其他内容.
这些文件是通过XSLT 2.0转换从各种其他XML版本的源文件生成的.转换是通过Java
使用Saxon 的任务在ant构建中完成的.(我无法使XSLT
任务或Saxon
任务按预期工作,因为我的XSL在某些情况下会从单个源文件生成多个结果文档,除了第一个结果文档之外的所有文档似乎总是被这些任务省略. )这是任务:
<java classname="net.sf.saxon.Transform" fork="true"
output="${dest.dir}/build"
resultproperty="transform_result"
failonerror="true">
<arg line="-o ${dest.dir}/ ${source.dir}/xml_sources ${source.dir}/xsl/transform.xsl"/>
</java>
Run Code Online (Sandbox Code Playgroud)
我还搜索了XSL和源XML文件以寻找不寻常的字符,并在XSL中使用字符映射并在结果文档中缩进以确保没有奇怪的空白字符.没有发现任何奇怪的东西,而且角色映射或缩进制作的唯一差异与手动编辑空白基本相同 - "错误"有时会四处移动,但仍然会发生.
我尝试过使用不同版本的Saxon和不同版本的Ant,没有不同的结果.问题开始了一段时间(不完全确定何时),但一切都曾经使用过一次,所以我尝试使用旧版本的XSL和源代码,但没有发现旧版本的东西没有显示问题(虽然由于从CVS切换到SVN,并且CVS不再存在,我可能根本无法回到足够远,因为现在丢失了一些最旧的修订版).
文件必须验证的DTD不是我的 - 我无法更改它或切换到架构.
我通常在Mac上工作(当前运行10.7.5),但问题也发生在Linux上(不确定是什么版本).我真的无法使用的一个变量是Java.当事情上次正常工作时,我可能已经运行了Java 1.5 - 我现在使用的是1.7,它确实发生在我运行1.6时.我不能在我有的机器上回到1.5.
这就是我能想到的所有可能相关的信息.
这个问题让我斗智斗勇.在我的所有研究中,我从未听说过其他人报告同样的问题,更不用说解决它了.任何关于可能出错的想法都会受到极大的赞赏.
谢谢!