У меня есть входной файл XML, который выглядит следующим образом:XPath Определить все XML-элементы по значению атрибута не известен до времени выполнения
<property>
<properties>
<entry id="55882d2cacb45">
<location_number>1</location_number>
<building_number>1</building_number>
<coverage source_id="55882d2cacb45">
<name>building</name>
<premium>2880</premium>
</coverage>
<coverage source_id="55882d2cacb45">
<name>contents</name>
<premium>1290</premium>
</coverage>
<coverage source_id="55882d2cacb45">
<name>business</name>
<premium>7780</premium>
</coverage>
<coverage source_id="55882d2cacb45">
<name>inflationGuard</name>
<premium>29</premium>
</coverage>
<coverage source_id="55882d2cacb45">
<name>terrorism</name>
<premium>353</premium>
</coverage>
<building>
<entry id="55882d2cacb45">
<building>1,000,000</building>
<coverage_form>Class</coverage_form>
<coverage source_id="55882d2cacb45">
<name>building</name>
<premium>2880</premium>
</coverage>
<group2_type>Symbol</group2_type>
</entry>
</building>
</entry>
</properties>
<properties>
<entry id="55882d2cacc68">
<location_number>1</location_number>
<building_number>2</building_number>
<coverage source_id="55882d2cacc68">
<name>building</name>
<premium>749</premium>
</coverage>
<coverage source_id="55882d2cacc68">
<name>contents</name>
<premium>170</premium>
</coverage>
<coverage source_id="55882d2cacc68">
<name>business</name>
<premium>1095</premium>
</coverage>
<coverage source_id="55882d2cacc68">
<name>inflationGuard</name>
<premium>7</premium>
</coverage>
<coverage source_id="55882d2cacc68">
<name>terrorism</name>
<premium>63</premium>
</coverage>
<coverage source_id="55882d2cacc68">
<name>theft</name>
<premium>266</premium>
</coverage>
<building>
<entry id="55882d2cacc68">
<building>100,000</building>
<coverage_form>Class</coverage_form>
<coverage source_id="55882d2cacc68">
<name>building</name>
<premium>749</premium>
</coverage>
<group2_type>Symbol</group2_type>
</entry>
</building>
<improvements>
<entry id="55882d2cacc68">
<improvements>5,000</improvements>
<coverage_form>Class</coverage_form>
<coverage source_id="55882d2cacc68">
<name>business</name>
<premium>1095</premium>
</coverage>
<group2_type>Symbol</group2_type>
</entry>
</improvements>
</entry>
</properties>
<eb>
<eb_total_insured_value>4155000</eb_total_insured_value>
<coverage source_id="55882d2cacb45">
<name>eb</name>
<premium>2880</premium>
</coverage>
</eb>
<value_pack>
<coverage source_id="55882d2cacb45">
<name>capacity_value_pack</name>
<premium>600</premium>
</coverage>
</value_pack>
<quote>
<taxes_fees>
<coverage source_id="55882d2cacb45">
<name>mga_fee</name>
<premium>25</premium>
</coverage>
<coverage source_id="55882d2cacb45">
<name>citizens</name>
<premium>165.65</premium>
</coverage>
<coverage source_id="55882d2cacb45">
<name>empa</name>
<premium>4</premium>
</coverage>
<coverage source_id="55882d2cacb45">
<name>fire_surcharge</name>
<premium>16.57</premium>
</coverage>
</taxes_fees>
</quote>
Мне нужно найти все элементы, независимо от их названий, что имеют атрибут source_id, который соответствует атрибуту id элемента элемента (см. первый элемент ввода) и обрабатывает их по отдельности. Значение неизвестно до выполнения. Использование ключа, похоже, является частью ответа, но имя элемента кажется жестко закодированным во всех примерах, которые я могу найти. Цените любое понимание!
«* Мне нужно найти все элементы, независимо от имени, которые имеют атрибут source_id, который соответствует идентификатору элемента ввода '(см. первый элемент ввода) и обрабатывать их по отдельности. * «Что именно означает« поиск и обработка »? Каким будет ожидаемый результат в данном примере? –
Если вы знаете о ключах, вы можете использовать ' ', чтобы определить ключ для всех элементов, имеющих 'source_id' атрибут. Затем из '' вы можете использовать, например. 'key ('source', @id)', чтобы найти все ссылочные элементы или даже в XSLT 2 'key ('source', @id,.)', чтобы найти все ссылочные элементы-потомки записи. –
Спасибо, все за такой быстрый ответ. Я попробую эти 2 решения от Martin и kjhughes в эти выходные. Благодаря micheal.hor257k; в будущем я сформулирую свои вопросы лучше. –