替换字符串XSLT

时间:2014-04-11 12:03:41

标签: xslt

我被困了。请帮我解决一个小问题。

我必须在XML文件中更改两个特定的行,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<max:PublishTP_WORKORDER xmlns:max="http://www.ibm.com/maximo" creationDateTime="2014-04-11T10:43:51+04:00" transLanguage="RU" baseLanguage="EN" messageID="1397198631936413520" maximoVersion="7 5 20130829-1209 V7510--1" event="1">
  <TP_WORKORDERSet xmlns="http://www.ibm.com/maximo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <WORKORDER action="Replace">
      <ACTCOST xsi:nil="true"/>
      <ACTFINISH xsi:nil="true"/>
      <ACTINTLABCOST>0.0</ACTINTLABCOST>
      <ACTINTLABHRS>0.0</ACTINTLABHRS>
      <ACTLABCOST>0.0</ACTLABCOST>
      <ACTLABHRS>0.0</ACTLABHRS>
      <ACTMATCOST>0.0</ACTMATCOST>
      <ACTOUTLABCOST>0.0</ACTOUTLABCOST>
      <ACTOUTLABHRS>0.0</ACTOUTLABHRS>
      <ACTSERVCOST>0.0</ACTSERVCOST>
      <ACTSTART>2013-11-08T12:03:26+04:00</ACTSTART>
      <ACTTOOLCOST>0.0</ACTTOOLCOST>
      <ADDRESS/>
      <AMCREW/>
      <AMS>0</AMS>
      <AOS>0</AOS>
...........................
      <WORKORDERID>10</WORKORDERID>
      <WORKPACKMTLSTATUS/>
      <WORKTYPE/>
      <WOSEQUENCE xsi:nil="true"/>
    </WORKORDER>
  </TP_WORKORDERSet>
</max:PublishTP_WORKORDER>

我需要将“PublishTP_WORKORDER”替换为“Create_WORKORDER”,包括打开和关闭标记。

它适用于:

 <?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:max="http://www.ibm.com/maximo" version="1.0">
<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="/max:PublishTP_WORKORDER">
  <xsl:element name="max:CreateTP_WORKORDER">
  <xsl:apply-templates select="@*|node()"/>
  </xsl:element>
</xsl:template>
</xsl:stylesheet>

但是在XML文件中它可以是“PublishTP_WORKORDER2”或“PublishTP_WORKORDER3”等等。 它应该更改为“CreateTP_WORKORDER2”,“CreateTP_WORKORDER3”等 而这个XSLT计划停止运作。它只是无法识别带有附加数字符号的字符串。我怎么能把它翻出来?提前谢谢。

1 个答案:

答案 0 :(得分:2)

  

它始终是根元素

那怎么样:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:max="http://www.ibm.com/maximo">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="/*">
    <xsl:variable name="suffix" select="substring-after(local-name(), 'PublishTP_WORKORDER')" />
    <xsl:element name="max:CreateTP_WORKORDER{$suffix}">
        <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>