2010-06-27 5 views
1

Это часть моего XML-документ:исправить это выражение XPATH пожалуйста

<?xml version="1.0" encoding="UTF-8"?> 
<catalog> 
<mfVictor> 
<decal> 
    <company>Victor</company> 
    <title>Wood Horn with Blue Background</title> 
    <image> 
     <url>victor01.jpg</url> 
     <width>60</width> 
     <height>60</height> 
     <name>Wood Horn Blue Background</name> 
     <link></link> 
    </image> 
    <price>$15.00</price> 
    <instock>In Stock</instock> 
    <notes>none</notes> 
    </decal> 
</mfVictor> 
</catalog> 

У меня есть функция, которая генерирует список текста из каждого элемента «названия». Итак, после каждого элемента списка я хочу перейти к «деколю» и получить доступ ко всем своим детям. Пока у меня есть это:

//decal[contains(.,\'"+itemName+"\')] 

где itemName is this.innerHTML передается функции. Похоже, что доступ к деколю осуществляется, потому что в console.log я вижу XML-объект длиной 1. Но я не могу понять, как получить доступ к детям «декаль» или братьям и сестрам «title».

Спасибо за чтение.

ответ

1

Если вам нужно выбрать наклейку на основе его названия я предпочел бы следующие XPaths:

//decal/title[contains(.,\'"+itemName+"\')]/parent::node() 
//decal/title[contains(.,\'"+itemName+"\')]/.. 
//decal[title[contains(.,\'"+itemName+"\')]] 

выбрать родственное название на наклейке вы выбрали вы можете использовать

//decal/title[contains(.,\'"+itemName+"\')]/following-sibling::* 

Если вы хотите, чтобы все ребенок наклейки вы выбираете вы можете использовать (возможно, вам это нужно)

//decal[title[contains(.,\'"+itemName+"\')]]/child::* 

или лучше, если у вас есть полное название

//decal[title[text()=\'"+itemName+"\']]/child::* 

С квадратной скобкой вы инструктировать парсер ходить по дереву XML, чтобы сделать выбор, основываясь на условии вы укажете, но без изменения контекста узла. Подумайте о квадратных скобках в качестве резиновой ленты, после того как тест, содержащийся в нем, будет удовлетворен, парсер вернется обратно к исходному узлу и оценит остальную часть выражения xpath. Первые два примера являются типичными

+0

Это объясняет это. Мне нужен был последний из ваших примеров. Благодаря! – Troy

0

Я думаю, вы могли бы хотеть //decal[contains(./Title, «Wood Horn с синим фоном»)]

Это должно дать вам декаль узел с дочерним узлом с именем «Title», который содержит text 'Wood Horn with Blue Background'

Для доступа к братьям и сестрам элемента Title вы должны выбрать детей узла, который возвращается. (Это на самом деле возвращение узла декаль, а не заголовок узел.)

 Смежные вопросы

  • Нет связанных вопросов^_^