2011-08-30 88 views
2

转换某些xml(dita)文档时,特殊字符,&符和“小于”字符(<)存在问题。但以“&”为例,发生的情况是由于某种原因在输出中重复了几次。事情是,我发现如果&amp;被替换(直接在xml内容中)与&#38;,那么它工作正常,没有重复。在DTD中声明&符号?

我不知道是什么导致了这种情况,但我想要做的是在DTD中声明和号以&#38;代替它。我发现谷歌搜索,你应该是这样做的:

<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd" [ 
<!ENTITY amp "&#38;#38;"> 
]> 

为简单起见,我在这里包括内嵌实体声明,但我也试图在实际DTD(concept.dtd)宣布它。但它不起作用。它似乎没有启动,因为我试图用<!ENTITY amp "TEST">替换它,只是为了查看它是否做了任何事情,而没有。

那么我该如何做到这一点?我只想将&amp;替换为&#38;所以我不需要手动替换每个文档中的每一处...

+1

您正在使用哪个XML解析器?它可能是一个根本不支持内部实体的人 - 这很难符合,但是你去了; “&”和“<”应该是预定义的,并且即使没有明确的声明也是如此。 –

+0

这是DITA Open Toolkit 1.4.3,它使用Saxon 6.5。是的,我知道它应该是预定义的并且可以工作,并且它确实将它变成了&,但不幸的是有多个&的实例。这就是问题......但是如果我用&替换&它不会相乘。 – Anders

+0

您确定要修改正确的DTD吗?您在下面说过您使用的是oXygen;你有没有检查过目录文件,看看'_ // OASIS // DTD DITA Concept // EN'公共标识符映射到哪个DTD? –

回答

1

我从氧气支持得到了答案。不确定这有助于任何人,这是一种不寻常的情况......但自定义DITA OT的xercesImpl.jar库必须包含在转换方案中。然后它工作。

1

如果您有一个XML处理管道,&#38;&amp;错误,那么您的XML处理管道已损坏。代码中的某些内容不符合&符号。您应该修复代码,而不是试图通过修改XML文档来解决它。

+0

我不怀疑你是对的,但是正如我在评论@亨宁我正在使用DITA Open Toolkit 1.4.3,这不是我的选择,它是客户端。他们将最终升级,而这个问题将会消失,但在此之前我需要修复而不必修改整个DITA Open Toolkit。我还应该提到,转换只是为了草稿,但对于获得正确的输出仍然很重要。 – Anders

+0

所以这就是为什么我试图找到一个解决方法,即使在工具包的管道中出现问题......我只是不明白为什么我不能用dtd中的实体替换&,是它不可能“覆盖”预定义的实体? – Anders

+0

我严重怀疑DITA Open Toolkit得到这个错误。在这个管道中你是否有任何自定义代码?客户可能写了些什么?这就是错误所在。 –