* +1000 *
Используйте
/*/DiagList
/*
[@icd
=
/*/ICDList/*
[contains(@description, $pText)]
/@id
]
, где $pText
должен быть заменен желаемым строковым литералом.
Проверка на основе XSLT :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my ">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pText" select="'ir'"/>
<xsl:template match="/">
<xsl:copy-of select=
"/*/DiagList
/*
[@icd
=
/*/ICDList/*
[contains(@description, $pText)]
/@id
]"/>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к предоставленному документу XML (исправлено, чтобы оно было правильно сформировано):
<t>
<DiagList>
<Diag id="1" icd="400"/>
<Diag id="2" icd="401"/>
<Diag id="3" icd="402"/>
<Diag id="4" icd="400"/>
</DiagList>
<ICDList>
<ICD id="400" description="First one"/>
<ICD id="401" description="Second one"/>
<icd id="402" description="Third one"/>
</ICDList>
</t>
требуемые узлы выбираются и копируются в вывод :
<Diag id="1" icd="400" />
<Diag id="3" icd="402" />
<Diag id="4" icd="400" />
когда мы установим в приведенном выше преобразовании :
<xsl:param name="pText" select="'st'"/>
, затем снова получается желаемый результат:
<Diag id="1" icd="400" />
<Diag id="4" icd="400" />