XSLT решение :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pNewIpAddress" select="'192.68.0.1'"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ipAddress/text()">
<xsl:value-of select="$pNewIpAddress"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к любому документу, все узлы документа копируются «как есть», за исключением дочернего элемента текстового узла любого ipAddress
элемента (независимо от того, где находится этот элемент документ). Последний заменяется значением предоставленного извне параметра с именем $pNewIpAddress
.
Например, если преобразование применяется к этому документу XML :
<t>
<a>
<b>
<ipAddress>127.0.0.1</ipAddress>
</b>
<c/>
</a>
<d/>
</t>
желаемый, правильный результат получается :
<t>
<a>
<b>
<ipAddress>192.68.0.1</ipAddress>
</b>
<c/>
</a>
<d/>
</t>
Существует много XSLT-процессоров на основе Java, и подходящее место для понимания того, как их можно вызывать из Java, - это их документация. Одним из лучших таких процессоров XSLT является Saxon, и его документацию можно найти по адресу:
http://www.saxonica.com/documentation/documentation.xml