У меня есть следующая структура, в которой я хочу выловить наиболее релевантные данные и склеить их вместе, чтобы сделать заголовок.
<faults>
<fault componentName="comp1">
<introduceWhen>Time1</introduceWhen>
<signals>
<signal name="sig11" value="1"/>
<signal name="sig22" value="1"/>
</signals>
</fault>
<fault componentName="comp2">
<introduceWhen>Time2</introduceWhen>
<signals>
<signal name="sig44" value="0"/>
</signals>
</fault>
</faults>
Я бы хотел, чтобы это было comp1 1 1 comp2 0
, но пока лучшее, что мне удалось, это comp1 1 1comp2 0
, используя это:
<xsl:template match="faults">
<xsl:for-each select="fault">
<xsl:variable name="compName" select="@componentName"/>
<xsl:variable name="sigVals" select="string-join(signals/signal/@value, ' ')"/>
<xsl:value-of select="concat(@compName, ' ', $sigVals)"/>
</xsl:for-each>
</xsl:template>
Решение, которое у меня есть, не кажется очень элегантным, поэтому, если у вас есть альтернативные подходы, я бы очень хотел их увидеть. У меня также есть полный контроль над XML, поэтому, если есть какие-либо хорошие решения, которые изменяют структуру XML, это тоже будет интересно.