私は以下のようなxmlを持っています:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<mObject distName="ABC-1/Schedule-New/ScheduleItem-2002" class="PM">
<p name="Active">1</p>
</managedObject>
<mObject distName="ABC-2/Schedule-New/ScheduleItem-2002" class="PM">
<p name="Active">1</p>
</managedObject>
</data>
ここで、以下のようにmObject 属性 distNameにテキスト「XYZ-1」を挿入する必要があります
<?xml version="1.0" encoding="UTF-8"?>
<data>
<mObject distName="ABC-1/XYZ-1/Schedule-New/ScheduleItem-2002" class="PM">
<p name="Active">1</p>
</managedObject>
<mObject distName="ABC-2/XYZ-1/Schedule-New/ScheduleItem-2002" class="PM">
<p name="Active">1</p>
</managedObject>
</data>
以下を使用してそれを達成できました:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output encoding="UTF-8" indent="yes" method="xml" omit-xml-declaration="no" doctype-system="raml21.dtd" />
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="mObject[@class = 'PM' ]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="distName">
<xsl:value-of select="concat(substring-before( @distName,'Schedule-' ), 'XYZ-1/', substring-after( @distName, '/'))"/>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
しかし、ここでいくつか質問があります:
これは、distName 属性で"/"が最初に出現した後に XYZ-1 テキストの挿入が常に行われることをどのように保証しますか?
"/"が最初に出現した後にのみ挿入が行われるようにします。
アイデアや提案はありますか????