Я обрабатываю этот XML:
<Brand>
<Brand_Name>BLENDERM</Brand_Name>
<Brand_Code>1103</Brand_Code>
<Groups>
<Group>
<Group_Code>657</Group_Code>
<Parent_Code>0</Parent_Code>
<Group_Level>1</Group_Level>
<Group_Name>Brand Default</Group_Name>
<Product>
<Pip_code>0032359</Pip_code>
<Status>In Use</Status>
Использование этого XSLT:
<xsl:template match="Product" mode="phase-3">
<xsl:value-of select="document('rx_catmapping.xml')/descendant::mapping[source=substring(ancestor::Brand/Brand_Name,1,1)]/target"/>
</xsl:template>
Вот пример файла rx_catmapping.xml:
<Lookup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<mapping>
<source>a</source>
<target>788</target>
</mapping>
<mapping>
<source>B</source>
<target>789</target>
</mapping>
</Lookup>
Итак, я обрабатываю элемент Product, который является потомком Brand. Первая буква Brand/Brand_Name
в этом случае - B, и я пытаюсь вывести значение 789, посмотрев его в rx_catmapping.xml. Это должно быть действительно просто, но я полностью озадачен! Я попытался изменить первую часть XPath, чтобы она ссылалась на document('rx_catmapping.xml')/Lookup/mapping
или document('rx_catmapping.xml')//mapping
. Я также пытался изменить первую половину сравнения на string(source)
или source/text()
, но ни одна из этих работ не работает. (Причиной попытки было то, что, например, использование source='B'
, похоже, работало, поэтому я подумал, не пытаюсь ли я сравнить два несовместимых типа данных.)
Заранее спасибо за помощь.