2016-11-06 2 views
0

Мне нужно выражение xpath, которое разделит XML-документ на основе условия, при котором я получаю один документ для каждого уникального (как в примере ниже).xpath выражение для значения узла

В приведенном ниже примере xml должны быть представлены 2 документа (идентификаторы 100 и 200). Я не хочу значения жесткого кода ...

Любые идеи, как я могу это сделать с помощью выражения xpath?

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

Пример:

<data> 
    <employee> 
     <id>100</id> 
     <tag>A</tag> 
    </employee> 
    <employee> 
     <id>100</id> 
     <tag>B</tag> 
    </employee> 
    <employee> 
     <id>200</id> 
     <tag>A</tag> 
    </employee> 
    <employee> 
     <id>200</id> 
     <tag>B</tag> 
    </employee> 
</data> 

Результат:

Документ № 1

<data> 
    <employee> 
     <id>100</id> 
     <tag>A</tag> 
    </employee> 
    <employee> 
     <id>100</id> 
     <tag>B</tag> 
    </employee> 
</data> 

Документ № 2

<data> 
    <employee> 
     <id>200</id> 
     <tag>A</tag> 
    </employee> 
    <employee> 
     <id>200</id> 
     <tag>B</tag> 
    </employee> 
</data> 
+0

XPath является языком запросов, он не расщепляется/преобразования/создания документов. Вы ищете XSLT? – Lucero

ответ

0

XPath - это язык запросов, а не преобразование документа. Поэтому задача не может быть выполнена только с XPath. Ваш вопрос также ничего не говорит о среде, в которой он работает, поэтому дать исчерпывающий ответ невозможно.

При этом, такой подход может быть то, что вам нужно:

  • Запрос для /data/employee/id и добавить значения узлов в наборе (например, мешок различных значений).
  • Завершите определенные значения и создайте такой запрос, чтобы получить соответствующие узлы для каждого сотрудника: /data/employee[id=ID] (где вы заменяете ID с отличным значением, которое вы в настоящее время итерируете).
  • Вы можете использовать эти результаты для создания ваших производных документов, но как это делается, зависит от среды.
2

В XSLT 2.0 это стандартное использование группирование случай:

<xsl:for-each-group select="employee" group-by="id"> 
    <xsl:result-document href="{position()}.xml"> 
    <data> 
     <xsl:copy-of select="current-group()"/> 
    </data> 
    </xsl:result-document> 
</xsl:for-each-group> 
Смежные вопросы