Не может заставить xslt производить (и) даже после выхода из символа

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

В этом случае вы не создаете объект obj, скорее предполагая, что он был создан до вызова метода doSomething. К сожалению, этот метод можно вызвать следующим образом:

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

19
задан Mathias Müller 21 March 2014 в 16:10
поделиться

9 ответов

Можно объединиться disable-output-escaping с CDATA раздел. Попробуйте это:

<xsl:text disable-output-escaping="yes"><![CDATA[&]]></xsl:text>
17
ответ дан 30 November 2019 в 02:24
поделиться

попытка: < xsl:value выберите = "& усилитель"; disable-output-escaping = "да"/>

Жаль, если форматирование испорчено.

-3
ответ дан 30 November 2019 в 02:24
поделиться

Используя disable-output-escaping атрибут (булевская переменная) является, вероятно, самым легким способом выполнить это. Заметьте, что можно использовать это не только на <xsl:value-of/>, но также и с <xsl:text>, который мог бы быть более чистым, в зависимости от конкретного случая.

Вот соответствующая часть спецификации: http://www.w3.org/TR/xslt#disable-output-escaping

0
ответ дан 30 November 2019 в 02:24
поделиться

Необходимо отметить, как который можно использовать disable-output-escaping в значении узла или представлять в виде строки/писать:

<xsl:value-of select="/node/here" disable-output-escaping="yes" />

или

<xsl:value-of select="'&amp;'" disable-output-escaping="yes" />
<xsl:text disable-output-escaping="yes">Texas A&amp;M</xsl:text>

Примечание одинарные кавычки в xsl:value.

Однако Вы не можете использовать disable-output-escaping на атрибутах. Я знаю, что это полностью испорчено, но, это - способ, которым вещи находятся в XSLT 1.0. Таким образом, следующее будет НЕ работа:

<xsl:value-of select="/node/here/@ttribute" disable-output-escaping="yes" />

, поскольку в мелком шрифте кавычка:

Таким образом, это ошибка для отключения выходного выхода для <xsl:value-of /> или <xsl:text /> элемент, который используется для генерации строкового значения комментария, обрабатывая инструкцию или узел атрибута ;

шахта акцента.

Взятый от: http://www.w3.org/TR/xslt#disable-output-escaping

0
ответ дан 30 November 2019 в 02:24
поделиться

При попытке произвести XML-файл, как произведено, то Вы захотите произвести &amp; (поскольку & на своем собственном недопустимый XML). Если Вы просто производите строку затем, необходимо установить режим вывода таблицы стилей к text включением следующего как ребенок xsl:stylesheet

<xsl:output method="text"/>

, Это будет препятствовать тому, чтобы таблица стилей вышла из вещей, и <xsl:value-of select="'&amp;'" /> должен произвести &.

4
ответ дан 30 November 2019 в 02:24
поделиться

Используйте disable-output-escaping="yes" в Вашем value-of тег

6
ответ дан 30 November 2019 в 02:24
поделиться

Если Вы создаете строку запроса как часть большего URL в атрибуте некоторого другого тега (как, "встраивают"), то Вы на самом деле хотите & быть оставленным как & усилитель;. в то время как все браузеры выяснят то, что Вы имеете в виду и Делай как надо, если бы необходимо было передать сгенерированный документ блоку проверки допустимости, то он отметил бы незавершенный & в значении атрибута.

4
ответ дан 30 November 2019 в 02:24
поделиться

Вы выражаете URI в HTML или XHTML? например, <tag attr="http://foo.bar/?key=value&amp;key2=value2&amp;..."/> Если так, "&amp;" корректный способ выразить амперсанд в значении атрибута, даже если он отличается от, чем литеральный URI, который Вы хотите. Браузеры будут декодировать" &amp;" и любая другая ссылка символьной сущности или перед загрузкой их или перед передачей их к Flash. Встроить литеральное, одинокое" &" непосредственно в HTML или XHTML является неправильным.

я также лично рекомендую узнать больше о XML для размышления об этих видах вещей более ясным способом. Например, попытайтесь использовать W3C DOM больше (для больше, чем просто тривиального JavaScript); даже если Вы не используете его ежедневный, узнавая, что DOM помог мне думать о древовидной структуре XML правильно и как думать о корректном кодировании атрибутов и элементов.

10
ответ дан 30 November 2019 в 02:24
поделиться

Если Ваше преобразование испускает XML-документ, Вы не должны отключать выходной выход. Вы хотите символы разметки быть оставленными в выводе, так, чтобы Вы не испускали уродливый XML. Объект XML, с которым Вы обрабатываете вывод (например, DOM) не выйдет из текста для Вас.

при использовании обработки строк вместо объекта XML для обработки вывода, у Вас есть проблема. Но проблема не с Вашим XSLT, это с решением использовать обработку строк для обработки XML, который является почти неизменно плохим.

, Если Ваше преобразование испускает HTML или текст (и Вы установили выходной тип на <xsl:output> элемент, правильно?), это - другая история. Затем уместно использовать disable-output-escaping='yes' на Вашем <xsl:value-of> элемент.

, Но в любом случае, необходимо будет выйти из символов разметки в текстовых узлах XSLT, если Вы не перенесли текст в раздел CDATA.

3
ответ дан 30 November 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: