У меня есть следующий XML:Переименовать узлы из списка имен в этом же документе XML
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Set>
<Tables>
<Table>
<Tablehead>
<C>Name</C>
<C>FirstName</C>
<C>Address</C>
<C>Zip</C>
<C>City</C>
<C>State</C>
</Tablehead>
<Rows>
<Person>
<C>Miller</C>
<C>John</C>
<C>Squires Circle</C>
<C>88034</C>
<C>Boulder</C>
<C>Colorado</C>
</Person>
</Rows>
</Table>
</Tables>
</Set>
</Data>
Элемента человек может возникнуть п раз. Теперь, чтобы правильно работать с этой структурой, я должен переименовать теги <C>
сначала в пределах <Person>
. я придумал этот XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Rows">
<Rows>
<xsl:apply-templates select="Person"/>
</Rows>
</xsl:template>
<xsl:template match="Person">
<Person>
<xsl:apply-templates select="C"/>
</Person>
</xsl:template>
<xsl:template match="/Data/Set/Tables/Table/Rows/Person/C">
<xsl:variable name="nodePosition" select="position()" />
<xsl:value-of select="parent::*/parent::*/parent::*/Tablehead/C[$nodePosition]"/>
</xsl:template>
Но выход всегда так:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Set>
<Tables>
<Table>
<Tablehead>
<C>Name</C>
<C>FirstName</C>
<C>Address</C>
<C>Zip</C>
<C>City</C>
<C>State</C>
</Tablehead>
<Rows>
<Person/>
</Rows>
</Table>
</Tables>
</Set>
</Data>
Это выглядит хорошо, но мой <Person>
элемент всегда пуст. Что мне не хватает? Я пробовал, но я не могу заставить его работать. Я рад любым идеям с вашей стороны. Спасибо и наилучшими пожеланиями, Питер
Ваш XML не содержит никаких элементов '', но ваш XSLT-код написан так, как если бы он был. Пожалуйста, объясните, как вы хотите, чтобы результат выглядел так. – mzjn
Здравствуйте, mzjn, Извините. Теперь я исправил свой XSLT, чтобы он соответствовал -tags. –
Peter