2017-05-19 3 views
1

Ich versuche, ein XML-Element in eine XML-Datei über Maven Ant-Plugin und die ReplaceRegexp Aufgabe einzufügen.Maven Ant Regex zum Einfügen von XML-Text

Dies ist, wie es aussieht, ursprünglich:

<types> 
    <xs:schema> 
     <xs:import namespace='http://biz.funct.com/c/data/v4_6' 
     schemaLocation='commoncomplexelements.xsd' /> 
    </xs:schema> 
    <xs:schema> 
     <xs:import namespace='http://biz.funct.com/b/data/v1_5' 
     schemaLocation='location.xsd' /> 
    </xs:schema> 
    <xs:schema> 
     <xs:import namespace='http://biz.funct.com/location/a/data/v1_5' 
     schemaLocation='location-validcodes.xsd' /> 
    </xs:schema> 
    <xs:schema> 
     <xs:import namespace='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' 
     schemaLocation='oasis-200401-wss-wssecurity-secext-1.0.xsd' /> 
    </xs:schema> 
    </types> 

Und das ist, wie es am Ende aussehen soll:

<types> 
    <xs:schema> 
     <xs:import namespace='http://biz.funct.com/c/data/v4_6' 
     schemaLocation='commoncomplexelements.xsd' /> 
    </xs:schema> 
    <xs:schema> 
     <xs:import namespace='http://biz.funct.com/b/data/v1_5' 
     schemaLocation='location.xsd' /> 
    </xs:schema> 
    <xs:schema> 
     <xs:import namespace='http://biz.funct.com/location/a/data/v1_5' 
     schemaLocation='location-validcodes.xsd' /> 
    </xs:schema> 
    <xs:schema> 
     <xs:import namespace='http://biz.funct.com/location/d/data/v1_5' 
      schemaLocation='newfile.xsd' /> 
    </xs:schema> 
    <xs:schema> 
     <xs:import namespace='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' 
     schemaLocation='oasis-200401-wss-wssecurity-secext-1.0.xsd' /> 
    </xs:schema> 
    </types> 

Dies ist, was ich bisher:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>insert-xml</id> 
        <phase>initialize</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
        <configuration> 
         <target name="Insert xml"> 
          <replaceregexp flags="m"> 
           <regexp pattern="\&lt;xs:schema\&gt;(.*)\&lt;/xs:schema\&gt;"/> 
           <substitution expression="hello"/> 
           <filelist 
            id="" 
            dir="${project.build.directory}/f" 
            files="ServiceInterface.wsdl"/> 
          </replaceregexp> 
         </target> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Jede Hilfe bei der richtigen Regexp würde sehr geschätzt werden.

+0

Was ist das eigentliche Problem? BTW, wenn Sie versuchen, einen Knoten in die vorletzte Position einzufügen, wie es offensichtlich ist, dass Regex wird es definitiv nicht tun, da es alles zwischen ... ' – sweaver2112

+0

@ sweaver2112 Ziel das Problem wird die richtige Regex. Ich habe die Frage bearbeitet, um sie zu klären. Ich weiß, dass die, die ich habe, nicht funktioniert, ich habe ziemlich viel Zeit mit dem Testen verbracht, aber ein einfaches Beispiel hinterlassen. Ich habe Angst, dass meine Regex-Fähigkeiten sehr begrenzt sind. – soltzu

+0

Sie möchten also den Spot direkt vor dem letzten Schemaparagieren? – sweaver2112

Antwort

1

können Sie versuchen, (?=<xs:schema>(?:(?!<\/xs:schema>).)+<\/xs:schema>\s*<\/type‌​s>) regex101.com/r/letGLw/2 und ersetzen Sie einfach die "Übereinstimmung" (die Null Breite - nur eine Position, verankert von der letzten </types>) mit Ihrem Ersatz-String.

https://regex101.com/r/letGLw/2/