Доступ только к одному элементу с общим именем в XML DOM с использованием jquery - PullRequest
2 голосов
/ 03 августа 2009

У меня проблемы с доступом только к одному элементу XML, имя которого совпадает с именем других элементов (в данном случае, тегом «имя»). Как я могу получить доступ ТОЛЬКО к "wantedName" ниже, используя jQuery?

<sample>
<input>
    <value>0.2</value>
    <name>varName</name>  
</input> 
<name>wantedName</name> 
<output> 
    <value>4</value> 
    <name>varName2</name> 
</output>
</sample> 

Использование $ (xml) .find ("name") возвращает массив, содержащий [varName, wantedName, varName2]. К сожалению, я не могу просто прибегнуть к доступу к 1-му индексу, потому что xml является динамическим, поэтому я не уверен, по какому индексу будет "wantedName".

Я бы хотел получить доступ к «wantedName», выполнив что-то вроде «если у него есть непосредственный родитель с именем <sample>, получите его, иначе проигнорируйте».

Ответы [ 3 ]

1 голос
/ 03 августа 2009

Предполагая, что структура xml всегда выглядит как приведенный пример (где имя находится сразу после тега ввода), я думаю, что это может сработать

$(xml).find("input + name");
0 голосов
/ 04 августа 2009

$(xml).find("input > name").text() должно работать очень хорошо, при условии, что вы работаете с XML как часть домена, а не просто как строка. Это потому, что «input» - это имя тега в html.

Если вы работаете со строкой, вот функция parseXml, которую я быстро нашел и протестировал в FF 3. Итак, проанализируйте вашу строку, а затем просмотрите ее через jquery.

function parseXML(xml) {
    if (window.ActiveXObject && window.GetObject) {
        var dom = new ActiveXObject('Microsoft.XMLDOM');
        dom.loadXML(xml);
        return dom;
    }
    if (window.DOMParser)
        return new DOMParser().parseFromString(xml, 'text/xml');
    throw new Error('No XML parser available');
} 

Редактировать

Это также будет работать без разбора как xml, при условии, что ваш xml не изменился.

$(xml).find("name:first").text();
0 голосов
/ 03 августа 2009

Предположительно, вы хотите получить любые name теги, которые являются потомками sample, но не , те, которые являются потомками input или любого другого тега?

Если так, это должно работать:

$(xml).find("sample > name");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...