Сегодня я действительно борюсь с XSLT, это было долгое время, когда я должен был его использовать. Мне нужно отредактировать xml, и я не могу использовать XSLT 2.0. Поэтому я должен использовать 1.0. Xml im struugling with is (базовый пример):XML-преобразование с XSLT 1
Я попытался создать шаблон для двух узлов, а затем «вызвать» этот шаблон для создания нового узла с нужными значениями, но это тоже не работает, если кто-то может указать мне в правильном направлении.
<messagemap>
<author>
<au_id>274-80-9391</au_id>
<au_lname>Straight</au_lname>
<au_fname>Dean</au_fname>
<phone>415 834-2919</phone>
<address>5420 College Av.</address>
<city>Oakland</city>
<state>CA</state>
<zip>94609</zip>
<contract>1</contract>
</author>
</messagemap>
XM:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<!--Identity Transform.-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="au_fname | au_lname">
<company>
<xsl:value-of select="."/>
</company>
</xsl:template>
</xsl:stylesheet>
Что я получить в результате:
<messagemap>
<author>
<au_id>274-80-9391</au_id>
<company>Straight</company>
<company>Dean</company>
<phone>415 834-2919</phone>
<address>5420 College Av.</address>
<city>Oakland</city>
<state>CA</state>
<zip>94609</zip>
<contract>1</contract>
</author>
</messagemap>
Что мне нужно, это:
<messagemap>
<author>
<au_id>274-80-9391</au_id>
<company>Dean Straight</company>
<phone>415 834-2919</phone>
<address>5420 College Av.</address>
<city>Oakland</city>
<state>CA</state>
<zip>94609</zip>
<contract>1</contract>
</author>
</messagemap>
Какой witchcraftis этого! Действительно, все было так просто. В любом случае, спасибо. У меня только вопрос о том, что concat делает первый «.», Тогда равен au_fname? Остальное очень ясно. – JonathanRomer
@ JonathanRomer - Тебе очень рады. Да, '.' - это текущий контекст, который является' au_fname'. Кроме того, было добавлено 'normalize-space()', чтобы урезать конечное пространство, которое будет добавлено 'concat()' if '../ au_lname' не существовало. –
Вы предоставляете случай, когда отсутствует имя au_lname, но не учитывайте, что au_fname не существует (как узел, а не как значение). –