Я мог бы использовать некоторую помощь с моим преобразованием XML, я видел другие подобные вопросы, но, поскольку моя схема XML немного неуклюжа, у меня возникают проблемы с ее применением.
Вот формат XML, который у меня есть
<root>
<row>
<var name="Name" value="Rusell" />
<var name=" Surname" value=" Anthony" />
<var name=" Country" value=" UK" />
<var name=" Job" value="Web Designer" />
<var name=" Cabin" value="345" />
</row>
<row>
<var name="Name" value="Wolf" />
<var name=" Surname" value=" Werner" />
<var name=" Country" value=" Germany" />
<var name=" Job" value="Linux IT" />
<var name=" Cabin" value="234" />
</row>
</root>
Я хочу, чтобы это выглядело так, чтобы я мог легко получать доступ к полям.
<root>
<row name="Rusell" surName="Anthony" country="UK" job="Web Designer" cabin="345" />
<row name="Wolf" surname="Werner" country="Germany" job="Linux IT" cabin="234" />
</row>
Я достиг прогресса в том, что касается форматирования, это то, что я получил до сих пор - значения не были вставлены.
<root>
<row Name="" Surname="" Country="" Job="" Cabin="" />
<row Name="" Surname="" Country="" Job="" Cabin="" />
<row Name="" Surname="" Country="" Job="" Cabin="" />
<row Name="" Surname="" Country="" Job="" Cabin="" />
</root>
Вот мой XSLT-файл -
Вы заметите, что для пары атрибутов при использовании значения select у меня другой синтаксис, это просто для демонстрации того, что я пробовал.
<xsl:template match="/">
<root>
<xsl:apply-templates/>
</root>
</xsl:template>
<xsl:template match="row">
<row>
<xsl:attribute name="Name">
<xsl:value-of select="value"/>
</xsl:attribute>
<xsl:attribute name="Surname">
<xsl:value-of select="row/root/name/value"/>
</xsl:attribute>
<xsl:attribute name="Country">
<xsl:value-of select="root/row/value"/>
</xsl:attribute>
<xsl:attribute name="Job">
<xsl:value-of select="@value"/>
</xsl:attribute>
<xsl:attribute name="Cabin">
<xsl:value-of select="value"/>
</xsl:attribute>
</row>
</xsl:template>
Кроме того, что касается вопроса повторного использования, вышеописанный метод подходит, когда я знаю поля и атрибуты, но я буду использовать разные XML-файлы с возможно большим количеством полей, т. Е. Адрес, возраст.
Итак, как бы мне создать файл XSLT, который выполняет следующее:
For each Node = root/row
Create row = (value@name & value@value)
I.E. То же самое, что я пытаюсь сделать выше, но можно использовать повторно, так как мне не нужно знать значения имени (фамилия, каюта и т. Д.), Так что это применимо к моему первому XML-файлу и следующим.
<root>
<row>
<var name="differentName" value="x" />
<var name="anotherdifferentname" value="y" />
</row>
</root>
Если мне нужно быть более ясным, пожалуйста, дайте мне знать и заранее спасибо.