Я искал поисковые запросы в течение часа, и ни один из ответов, которые я нашел, не решил эту проблему.Как сопоставить шаблон с первым дочерним узлом корневого узла xslt
Вот отрывок из моего XML
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>foobar</groupId>
<artifactId>superpom</artifactId>
<version>0.1.0.5</version>
</parent>
<artifactId>common-parent</artifactId>
<version>0.2.0.4-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<protostuff.version>1.0.7</protostuff.version>
<version>2.0.12.0</version>
</properties>
То, что я хотел бы, чтобы заменить значение самого первого «версия» узла должно быть изменено на что-то другое.
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>foobar</groupId>
<artifactId>superpom</artifactId>
<version>0.1.0.5</version>
</parent>
<artifactId>common-parent</artifactId>
<version>THIS HAS CHANGED</version>
<packaging>pom</packaging>
<properties>
<protostuff.version>1.0.7</protostuff.version>
<version>2.0.12.0</version>
</properties>
До сих пор это мой файл XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pReplacement" select="'THIS HAS CHANGED'"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//version[2]">
<xsl:value-of select="$pReplacement"/>
</xsl:template>
</xsl:stylesheet>
Я играл со значением в «матче» и ничего не работал. Я пробовал «версию», «/ версию», «версию [2]». Ничего не сработало. Я не знаю, если это имеет значение, но я использую xsltproc на сервере red hat для запуска преобразования. Кто-нибудь может помочь?
Спасибо! Теперь я чувствую себя глупо. –