2016-07-14 2 views
0

У меня следующие данные xml.Удалить повторяющиеся записи с помощью выражения Xpath

<product ID="2300"> 
<name>title</name> 
<price currency="EUR">174.00</price> 
</product> 

<product ID="2300"> 
<name>title</name> 
<price currency="EUR">164.00</price> 
</product> 

Единственная разница между этими двумя - это только цена. Я просто хочу удалить повторяющиеся строки. Я уже пробовал использовать следующий код.

/product[not(@ID=preceding-sibling::product/@ID)]/@ID 

и

/product[not(@ID=preceding::product/@ID)]/@ID 

Но я получаю сообщение об ошибке, без сопоставления найденных выражений. У меня нет опыта работы с xpath.

может кто-нибудь помочь мне с этим, пожалуйста ...

UPDATE Я включил часть исходного XML-дерева, а некоторые (ссылки образа экрана только), что я вижу в первых шагах wpallimport плагина ,

<?xml version="1.0" encoding="utf-8"?> 
 
<!-- Generated on 07/15/16 at 15:24:54 --> 
 
<products> 
 
<product ID="2300"> 
 
<name></name> 
 
<price currency="EUR">174.00</price> 
 
<URL></URL> 
 
<images> 
 
<image></image> 
 
</images> 
 
<description></description> 
 
<categories/> 
 
<properties> 
 
<property name="priority"> 
 
<value>1</value> 
 
</property> 
 
<property name="accommodationName"> 
 
<value></value> 
 
</property> 
 
<property name="city"> 
 
<value>City</value> 
 
</property> 
 
<property name="region"> 
 
<value>Region</value> 
 
</property> 
 
<property name="country"> 
 
<value>Country</value> 
 
</property> 
 
<property name="origin"> 
 
<value></value> 
 
</property> 
 
<property name="transportType"> 
 
<value></value> 
 
</property> 
 
<property name="departureDate"> 
 
<value></value> 
 
</property> 
 
<property name="duration"> 
 
<value></value> 
 
</property> 
 
<property name="minPersons"> 
 
<value></value> 
 
</property> 
 
<property name="boardType"> 
 
<value></value> 
 
</property> 
 
<property name="stars"> 
 
<value></value> 
 
</property> 
 
<property name="accommodationType"> 
 
<value></value> 
 
</property> 
 
</properties> 
 
<variations/> 
 
</product>

Screendump1

Screendump2

+0

XML, вы показываете не очень хорошо образован: не содержащий обертку элемент. Если есть элемент-оболочка 'products', ваш путь должен быть изменен на'/products/product [....] '. Кроме того, ваши выражения XPath выглядят хорошо для меня. –

+0

Спасибо! Вы правы насчет обертки. Проверьте мой другой ответ ниже! – user3676298

+0

Очевидно, нам нужно знать дерево XDM, которое мы запрашиваем. Из вашего описания, учитывая, что мы не знаем плагин wpallimport, мы не знаем, являются ли элементы продукта братьями и сестрами, и мы не знаем, являются ли они частью дерева, внедренного в узел документа; без понимания ввода, мы не можем на самом деле разработать подходящее выражение пути. –

ответ

0
//product[following-sibling::product/@ID = @ID] 
+1

Хотя этот код может помочь решить проблему, предоставление дополнительного контекста относительно того, почему и/или как он отвечает на вопрос, значительно улучшит его долгосрочную ценность. Измените свой ответ, чтобы добавить какое-то объяснение. –

+0

Благодарим вас за ответ. К сожалению, этот тоже не выполняет эту работу. Может быть, я должен был дать более подробную информацию. Я импортирую этот канал в WooCommerce (Wordpress) с помощью плагина wpallimport. Я не знаю, знакомы ли вы с этим плагином. Единственный путь - «/ product». Оригинальный XML хорошо сформирован и имеет оболочку с именем «продукты». Обертка «продукты» не видна, потому что этот плагин обрабатывает фид с отдельными записями. Но только на первом этапе мне нужно отфильтровать XML с помощью Xpath. Надеюсь, у вас есть другое предложение. – user3676298

+1

@ oɔɯǝɹ, пожалуйста, используйте '[edit]', чтобы сделать «редактировать» полезную ссылку для автора. Вы также можете подчеркнуть «как» и «почему»: «Хотя этот код может помочь решить проблему, , обеспечивающий дополнительный контекст относительно _why_ и/или _how_ it , ответ на вопрос значительно улучшит его долгосрочное значение . Пожалуйста, отредактируйте свой ответ, чтобы добавить пояснение .' –

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