Как я могу исключить элементы с xsi: nil = "true" из преобразования? - PullRequest
0 голосов
/ 01 февраля 2010

У меня есть несколько файлов XML, которые недавно изменились, поэтому некоторые узлы теперь имеют атрибут xsi: nil = "true". У меня есть таблица стилей XSLT, которая переводит XML в HTML для быстрого просмотра данных. В настоящее время, чтобы упростить себе задачу, я убираю пространства имен из XML, прежде чем применить таблицу стилей. Это работало хорошо до нашего последнего обновления. Теперь я получаю сообщение об ошибке, потому что XSL не знает, как обрабатывать xsl: nil = "true".

Я могу легко обновить код, поэтому я выполняю замену / удаление для всех совпадений xsl: nil = "true" в XML перед тем, как преобразовать его, но мне было интересно, можно ли замаскировать таблицу стилей XSLT так что xsi: nil будут игнорироваться / не вызывать сбоев преобразования, даже если в XML нет пространств имен. Я бы предпочел поступить таким образом, потому что я могу внести изменения на сервере сейчас, где, если мне нужно выпустить новую веб-сборку, мне нужно перепрыгнуть через некоторые внутренние обручи, чтобы развернуть ее.

После того, как у меня все заработает (либо путем удаления xsl: nil до или во время преобразования), я обведу вокруг и выясню, почему я изначально удалил пространства имен, и исправлю это.

Спасибо за любую помощь, которую вы можете мне дать.

1 Ответ

2 голосов
/ 01 февраля 2010

Почему вы сначала удалили пространства имен? XSLT позволяет вам контролировать то, какие префиксы не должны быть помещены в вывод, и вы можете пропустить эти xsi:nil в таблице стилей.

Если для префикса xsi отсутствует объявление префикса пространства имен, XML является недопустимым. Так что либо вы имеете дело с недопустимым XML, либо у вас еще где-то есть объявление пространства имен XSI, и вы можете изменить XSLT, чтобы пропустить эти записи.

Если вы выполняете поиск-замену в источнике XML, действительно исправьте это позже (скоро!), Потому что подобные вещи могут сломать вам шею.

...