Для входного файла:
$ more input.xml
<root>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>showServerInfo</param-name>
<param-value>false</param-value>
</init-param>
</root>
Вы можете использовать следующую таблицу стилей XSLT:
$ more listing_conv.xslt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="//init-param[./param-name = 'listings']/param-value">
<param-value>false</param-value>
</xsl:template>
</xsl:stylesheet>
Пояснение:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
эта часть будет копировать все в файл XML (поведение по умолчанию), кроме случаев, когда вы достигнете XPATH: //init-param[./param-name = 'listings']/param-value
<xsl:template match="//init-param[./param-name = 'listings']/param-value">
<param-value>false</param-value>
</xsl:template>
Эта вторая часть позволит вам изменить значение param-value
на false.
Поскольку XPATH будет обращаться к элементам с именем init-param
, у которых есть дочерний элемент с именем param-name
, значение которого установлено на listings
. Для этих элементов вы получаете доступ к дочернему элементу с именем param-value
и перезаписываете его на false
.
ВЫВОД:
$ xsltproc listing_conv.xslt input.xml
<?xml version="1.0"?>
<root>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>showServerInfo</param-name>
<param-value>false</param-value>
</init-param>
</root>
Я использовал команду xsltproc
для запуска процесса XSLT, но вы можете использовать другие команды как xalan
или вы можете просто скачать jar саксонского парсера: saxon9he.jar
и запустить java -jar saxon9he.jar <attributes>
Дополнительная информация:
Мне нужна простая программа командной строки для преобразования XML с использованием таблицы стилей XSL