Использование :
/*/L/D/node()
Выбирает все узлы (элементы, текстовые узлы, инструкции обработки и узлы комментариев), которые являются дочерними для любого элемента D
, который являетсядочерний элемент любого элемента L
, который является дочерним элементом верхнего элемента документа XML.
В качестве альтернативы, вы можете отдельно выбрать всех дочерних узлов двух элементов /*/L/D
:
/*/L[1]/D/node()
и
/*/L[2]/D/node()
Проверка с использованием XSLT в качестве хоста XPath :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="/*/L[1]/D/node()"/>
--------------------
<xsl:copy-of select="/*/L[2]/D/node()"/>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML :
<MAIN>
<L>
<D>string1 string2
<b>string3</b> string4
</D>
</L>
<L>
<D>string5 string6
<b>string7</b> string8
<i>string9</i>
</D>
</L>
</MAIN>
желаемый, правильный результат получается :
string1 string2
<b>string3</b> string4
--------------------
string5 string6
<b>string7</b> string8
<i>string9</i>