Необходимо извлечь узел XML с помощью jquery, где одноуровневый узел равен определенному значению;используя xPath сейчас - PullRequest
2 голосов
/ 03 августа 2011

Вот фрагмент XML-файла:

<Catalog>
  <CDs>
    <CD>
      <Manuals>
        <Manual>123DHX<Manual>
        <Manual>5axDHX<Manual>
        <Manual>5DaDHX<Manual>
        <Manual>5dADHX<Manual>
        <Manual>10XDHX<Manual>
      </Manuals>
      <SomeOtherNode>text</SomeOtherNode>
      <YetAnotherNode><text</YetAnotherNode>
      <Blueprint>No.8</Blueprint>
    </CD>
  </CDs>  
</Catalog>

В настоящее время Я использую xPath для выбора узла Manuals, где узел Blueprint (его родственный элемент) равен значению в поле выбора / раскрывающегося списка .

xmlobject.selectSingleNode("/Catalog/CDs/CD/Manuals[../Blueprint='" + document.getElementById("Blueprint_Select").value + "']");

Как мне сделать эквивалент в jQuery?

Я попробовал следующее, но он выбирает узел Blueprint, а не его одноуровневый узел, узел Manuals, что мне и нужно:

$(xmlobject).find("Blueprint:contains(" + $("#Blueprint_Select").val() + ")");

Я нашел эту ссылку, jQuery, чтобы получить совпадающие узлы в XML , но это не сильно помогло, поскольку .has () для потомков, и я не могу найти подобный синтаксис в jquery для потомков или братьев и сестер.

Заранее благодарю за любую помощь.

1 Ответ

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

Если элемент <Manuals> всегда является непосредственным братом элемента <Blueprint>, вы можете использовать метод prev () :

$(xmlobject).find("Blueprint:contains(" + $("#Blueprint_Select").val() + ")")
            .prev("Manuals");

РЕДАКТИРОВАТЬ: Если вы не можете предсказать порядок элементов, используйте метод siblings () :

$(xmlobject).find("Blueprint:contains(" + $("#Blueprint_Select").val() + ")")
            .siblings("Manuals");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...