Ниже представлены два файла XML. Я хочу отфильтровать XMLA только тем людям, которые существуют в XMLB, используя поле name
.Фильтрация одного XML с использованием узлов из второго XML в XSLT 1.0
Оба XML-документа хранятся в переменных $ XMLA и $ XMLB.
Я создал выход с помощью XQuery 1.0, но я не уверен, как выполнить ту же операцию в XSLT 1.0.
XMLA:
<table>
<row>
<name>NNN</name>
<address>1234 NN</address>
<phone>23423423</phone>
</row>
<row>
<name>kkk</name>
<address>1234 KK</address>
<phone>4343434</phone>
</row>
</table>
XMLB:
<table>
<row>
<id>1111</id>
<batch>1212</batch>
<name>NNN</name>
</row>
<row>
<id>2222</id>
<batch>2121</batch>
<name>kkk</name>
</row>
</table>
XQuery:
for $y in fn:doc('XMLA.xml')/table/row
for $x in fn:doc('XMLB.xml')/table/row
for $a in $x/name
where $y/name = $a
order by $y/name
return $y
Поэтому я ищу в XSLT, потому что синтаксический на большой файл XML крайне медленно с XQuery. Я не уверен, что это из-за того, что мой XQuery построен неправильно, но я хочу дать XSLT попробовать и сравнить эффективность.
Это работает отлично. Это значительно сократило время разбора с 30 секунд (от моего метода) до ~ 1 сек (используя то, что вы предложили). Большое спасибо! – Cris3k
У XSLT есть средство, которое может помочь сократить время обработки очень больших входов (xsl: key), но я бы сказал, что использую то, что у вас здесь, 1 секунда не кажется необоснованным. – Tomalak