Я довольно новичок в XSLT.
Мне нужна помощь и руководство для выполнения следующей задачи
У меня есть один входной XML:
<Prices>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>shell</group>
<Cost>0.23</Cost>
</Price>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>shell</group>
<Cost>0.23</Cost>
</Price>
<Price>
<Name>test12345</Name>
<Type>Data Stored - Tables</Type>
<group>--</group>
<Cost>0.00</Cost>
</Price>
Мне нужно искать группу в каждом элементе, как в этом случае это shell .Как только оболочка сопоставлена, в выходном xml должны присутствовать полные узлы, такие как
<Prices>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>shell</group>
<Cost>0.23</Cost>
</Price>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>shell</group>
<Cost>0.23</Cost>
</Price>
</Prices>
Я пытался использовать много xslt, но я не смог получить этот вывод.
Может некоторыеодин, пожалуйста, помогите мне.
Здесь, входной файл имеет только 3 узла, но на самом деле он может иметь более 50 узлов.
Попробовал использовать этот xslt, но его ошибка
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Identity transform -->
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:param name="str" select="'shell'"/>
<xsl:template match="@* | node()">
<output>
<xsl:for-each select="//*[.=$str]">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:for-each>
</output>
</xsl:template>
</xsl:stylesheet>
Спасибо Мартину за помощь в предыдущем случае использования.
Также теперь я хочу, чтобы это было похоже на поиск двух или более переменных.Чтобы понять, ниже приведен входной файл xml
<Prices>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>shell</group>
<Cost>0.23</Cost>
</Price>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>shell</group>
<Cost>0.23</Cost>
</Price>
<Price>
<Name>test12345</Name>
<Type>Data Stored - Tables</Type>
<group>--</group>
<Cost>0.00</Cost>
</Price>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>shell12345</group>
<Cost>0.54</Cost>
</Price>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>nutshell1234</group>
<Cost>0.60</Cost>
</Price>
</Prices>
Я хочу, чтобы вывод был
<Prices>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>shell</group>
<Cost>0.23</Cost>
</Price>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>shell</group>
<Cost>0.23</Cost>
</Price>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>shell12345</group>
<Cost>0.54</Cost>
</Price>
<Price>
<Name>1234</Name>
<Type>account</Type>
<group>nutshell1234</group>
<Cost>0.60</Cost>
</Price>
</Prices>
Кроме того, группы, в которых есть sheel, nutshell, shell12345, могут быть и другими, безсопоставляя любые строки, а также.Но хороший момент заключается в том, что мне нужно искать, так что при необходимости мы можем просто указать значение в жестком коде.