2016-10-06 3 views
0

У меня есть следующие части JScript кода в моей XSLT:JScript ошибка времени выполнения в XSLT: Object требуется

var childAttribute1 = ppDemo1[i].firstChild.attributes; 
    if(childAttribute1.length != 0)  
    { 
     .... 
    } 

    var childAttribute2 = ppDemo1[i].childNodes.item(0); 
    if(childAttribute2.nodeType != 8) 
    { 
     .... 
    } 

ppDemo1 пункты к комментировал узла/текст в XML

Я пытаюсь достичь то же самое есть не ввести, если цикл, если текущий узел является комментарием (и не имеет атрибутов)

Мой вопрос: Я всегда получаю ошибку «Требуется объект» во время выполнения в обоих «если» положений

Можете ли вы сказать мне, что случилось в приведенных выше фрагментов кода

Отредактировано:

Я использую процессор MSXML

И, я могу заставить его работать, если я использую:

if(ppDemo1[i].attributes) 
    { 
     ... 
    } 
+1

Рассмотрите возможность публикации минимальных, но полных образцов, чтобы другие могли воспроизвести проблему. Поскольку использование JScript и открытого API зависит от используемого XSLT-процессора, вам также нужно точно указать, какой XSLT-процессор вы используете. –

+0

Прости, я пропустил это раньше. Я использую MSXML. Я также обновил сообщение – user3208131

ответ

0

Первая часть кода:

свойство attributes возвращает null для комментариев узлов (documentation). Ошибки «Необходимые объекты» возникают из-за того, что вы пытаетесь получить доступ к свойству length по нулевому значению.

Второй кусок кода:

Для комментария узла, childNodes всегда возвращает пустой список узлов. Попытка доступа к первому элементу пустого списка узлов возвращает null, поэтому вы получаете ту же ошибку, пытающуюся получить доступ к свойству length.

Как вы обнаружили, просто проверка возвращаемого значения attributes работает, так как null оценивает значение false. Если вам действительно нужно проверить длину списка узлов атрибутов, вы можете сделать это:

if (childAttribute1 && childAttribute1.length != 0) { ... } 
Смежные вопросы