Я использую XPath для извлечения значений элементов DOM. Поскольку XPaths несовместимы, я использую магию подстановочных знаков, чтобы выбрать все элементы DOM на одном уровне.
Пример XPaths в документе HTML:
//div[@id='floatswrap']/div/div[2]/div[1]
//div[@id='floatswrap']/div/div[2]/div[2]
//div[@id='floatswrap']/div/div[2]/div[3]
......
//div[@id='floatswrap']/div/div[2]/div[100]
Я пробовал */div[@id='floatswrap']/div/div[2]/div
(обратите внимание на символ звездочки в начале и без квадратных скобок в конце), но он терпит неудачу. Поэтому я использую следующее (пример кода для выше): //div[@id='floatswrap']/div/div[2]/div[*]
(обратите внимание на звездочку внутри скобок), и она показывается.
Поскольку я новичок в XPath, есть ли лучший и более последовательный способ сделать выбор узла XPath с помощью подстановочных знаков?
EDIT: Предположим, у меня есть следующий HTML:
<html>
<head>
</head>
<body>
<div id="floatswrap">
<div>
<div>First</div>
<div> <!-- SELECT ALL DIV NODES WRAPPED IN THIS DIV -->
Second
<div>One</div> <!-- SELECT THIS NODE -->
<div>Two</div> <!-- SELECT THIS NODE -->
<div>Three</div> <!-- SELECT THIS NODE -->
<!-- ........ --> <!-- SELECT ALL DIV NODES -->
<div>Hundred</div> <!-- SELECT THIS NODE -->
</div> <!-- ./Second DIV -->
</div>
<div> Some Text </div>
<div> Some Other Text </div>
</div> <!-- ./floatswrap -->
</body>
</html>
Я пытаюсь выбрать все DIV во втором DIV.
Если вы не дадите предикат, не будут добавлены дополнительные фильтры (но для имени элемента, здесь div). div[*]
на самом деле не совсем то, что вам нужно; он выбирает только divs с другими дочерними узлами.
Это выберет весь div, который вы хотите:
//div[@id='floatswrap']/div/div[2]/div
Возможно, вам захочется добавить позиционный предикат на второй шаг оси, если он слишком много:
//div[@id='floatswrap']/div[1]/div[2]/div
Дальнейшее упрощение не представляется возможным; вы можете выбрать только div, не содержащий других элементов, но я не думаю, что это лучше в любом случае:
//div[@id='floatswrap']//div[not(*)]
//div[@id=...]
целесообразно. Без какого-либо примера ввода, дальнейшие комментарии по поводу того, что следует, не могут быть сделаны. Пожалуйста, опубликуйте хотя бы весь div, а также ожидаемый результат.