Объявить амперсанд в DTD? - PullRequest
       38

Объявить амперсанд в DTD?

2 голосов
/ 30 августа 2011

При преобразовании некоторых документов xml (dita) возникает проблема со специальными символами, амперсандом и символом «меньше» (<). Но если взять в качестве примера амперсанд, то происходит то, что по какой-то причине он повторяется несколько раз на выходе. Дело в том, что я обнаружил, что если <code>&amp; заменяется (непосредственно в содержимом xml) на &#38;, то это работает нормально, без повторов.

Я не знаю, что вызывает это, но я хочу объявить амперсанд в DTD, чтобы заменить его на &#38;. По поиску, я обнаружил, что вы должны сделать это так:

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

Для простоты я включил здесь объявление встроенной сущности, но я также попытался объявить его в фактическом DTD (concept.dtd). Но это не работает. Кажется, он даже не срабатывает, потому что я тоже попытался заменить его на <!ENTITY amp "TEST">, просто чтобы посмотреть, что он вообще что-то сделал, и не сделал.

Так как мне это сделать? Я просто хочу, чтобы &amp; был заменен на &#38; поэтому мне не нужно вручную заменять каждое вхождение в каждом документе ...

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

Я получил ответ от службы поддержки Oxygen.Не уверен, что это кому-нибудь поможет, это довольно необычная ситуация ... Но в сценарий преобразования должна была быть включена библиотека xercesImpl.jar из пользовательского DITA OT.Тогда это сработало.

1 голос
/ 30 августа 2011

Если у вас есть конвейер обработки XML, который правильно работает с &#38; и неправильно с &amp;, то у вас сломанный конвейер обработки XML.Что-то в твоем коде спутывает амперсанды.Вы должны исправить код, а не пытаться обойти его, изменив XML-документы.

...