XLM Datei lesen Ändern (kompliziertes Search and Replace) und Speichern

  • Themenstarter Themenstarter Reto_need_help
  • Beginndatum Beginndatum
R

Reto_need_help

Gast
Hallo Zusammen


Ich muss aus einer XML Datei den String nach "! SET &UNIX_CMD# = "&POWER_CENTER_SCRIPT#" (ROT geschrieben) auslesen und den beim ArchivKey2 einsetzen.
Dies brauche ich, um in einem Programm den Pfad anzuzeigen.

Ich bin total neu auf dem Gebiet und habe ein paar Fragen.

Welcher parser wäre am besten? Da ich ja nicht wirklich objekte brauche sondern nur ein search und replace.
Wie kann ich nach diesem Pfad (rot) suchen, wenn sich der String ständig verändert? das Power_Center_script vorher bleibt gleich.

Ist es überhaupt sinvoll so etwas mti Java zu machen? Ich habe 2000 Filse die ich so bearbeiten muss.

Gibt es auch die Möglichkeit mit Java anschliessend ein Programm zu schreiben, dass alle diese 2000 Files durch das erstelle Programm laufen zu lassen?

Ich bin wirklich ein beginner auf dem gebiet und wäre sehr froh für viele Tips.
Ich habe schon den ganzen Morgen gegoogled und bin so auf die verschiedenen Parsers etc. gekommen. Weiss aber nicht was mein Programm wirklich für anforderungen hat.



[XML]
<?xml version="1.0" encoding="ISO-8859-15" ?>
- <uc-export clientvers="6.00">
- <JOBS_UNIX client="0010" name="110_0502D_JU" system="UC4P">
- <XHEADER state="1">
<Title>Start Power Center process "DESU_Comp:w_06188_genNewProcessingPeriod"</Title>
<Created>Sylvia Struchen on: 2007-10-31 13:13:03</Created>
<Modified>Sylvia Struchen on: 2007-10-31 13:14:51 2 x</Modified>
<LastUsed />
<ArchiveKey1 />
<ArchiveKey2 />
<ExtRepDef>1</ExtRepDef>
<ExtRepAll>0</ExtRepAll>
<ExtRepNone>0</ExtRepNone>
</XHEADER>
.......... (Gelöschte Zeilen wegen Übersicht)
- - <SCRIPT state="1">
- <MSCRI>
- <![CDATA[
:INCLUDE 110_0001X_IN
! SET &UNIX_CMD# = "&POWER_CENTER_SCRIPT# DESU_Comp:w_06188_genNewProcessingPeriod"
:INCLUDE 000_UXCMD_IN
!
]]>
</MSCRI>
</SCRIPT>
[/XML]



Vielen Dank
 
Noch anbei. Das mit den Farben hat nicht Funktioniert. Es handelt sich um <ArchivKey2/> und die Text den Code bei:

- <MSCRI>
- <![CDATA[
:INCLUDE 110_0001X_IN
! SET &UNIX_CMD# = "&POWER_CENTER_SCRIPT# DESU_Comp:w_06188_genNewProcessingPeriod"
:INCLUDE 000_UXCMD_IN
!
]]>

Nicht den aus dem Titel

Also am schluss sollte es so aussehen
<ArchivKey2>DESU_Comp:w_06188_genNewProcessingPeriod</Archivkey2>

Ich nehme an, dass ich beim ersetzen sowieso den Archivkey löschen muss und ihn neu erstellen, da er ja von <Archivkey2/> auf <Archivkey2>..</Archivkey> wechselt
 
Das sollte deine Lösung sein:

Java:
import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;

public class XMLReplacement {

	
	public static void main(String[] args) throws Exception {
		File f = new File(args[0]);
		Document doc = parseDocument(f);
		String s = selectSingleNodeText(doc, "MSCRI").getNodeValue();

		Node archiveKey2 = selectSingleNode(doc, "ArchiveKey2");
		s = parseString(s);
		archiveKey2.setNodeValue(s);
		
		writeXmlFile(doc, new File("output.xml"));
	}

	private static void writeXmlFile(Document doc, File file) throws Exception {
		Source source = new DOMSource(doc);

		Result result = new StreamResult(file);

		Transformer xformer = TransformerFactory.newInstance().newTransformer();
		xformer.transform(source, result);
	}

	private static String parseString(String s) {

		Pattern p = Pattern
				.compile("(:INCLUDE 110_0001X_IN \n! SET &UNIX_CMD# = \"&POWER_CENTER_SCRIPT# )(.*)(\"\n:INCLUDE 000_UXCMD_IN)");
		Matcher m = p.matcher(s);
		if (m.find()) {
			s = m.group(2);
		}

		return s;
	}

	private static Document parseDocument(File xml) throws Exception {
		DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance()
				.newDocumentBuilder();
		return documentBuilder.parse(xml);
	}

	private static Node selectSingleNodeText(Document doc, String nodeName)
			throws Exception {

		XPathFactory factory = XPathFactory.newInstance();
		XPath xpath = factory.newXPath();
		XPathExpression expr = xpath.compile("//*[local-name()='" + nodeName
				+ "']/text()");

		Node result = (Node) expr.evaluate(doc, XPathConstants.NODE);

		// for CDATA section
		if (result.getNextSibling() != null) {
			result = result.getNextSibling();
		}

		return result;

	}

	private static Node selectSingleNode(Document doc, String nodeName)
			throws Exception {

		XPathFactory factory = XPathFactory.newInstance();
		XPath xpath = factory.newXPath();
		XPathExpression expr = xpath.compile("//*[local-name()='" + nodeName
				+ "']");

		Node result = (Node) expr.evaluate(doc, XPathConstants.NODE);

		// for CDATA section
		if (result.getNextSibling() != null) {
			result = result.getNextSibling();
		}

		return result;

	}

}


beim Programmstart die Datei angeben. Im Arbeitsverzeichnis wird dann eine output.xml erzeugt. Du musst das halt noch auf deine Bedürfnisse (mehrere xml-Dateien bearbeiten, gleiche XML-Datei für output verwenden) anpassen.
 
Zuletzt bearbeitet:
wow vielen dank!

sind die Imports Biblios von den xmls schon standartmässig dabei?
oder muss ich mir noch einen parser holen bzw. welcher wurde bei dir verwendet?

wegen den dateien etc lass ich mir sicher noch was einfallen!
 
Hmmm. Irgendwie kann ich beim Programmstart nichts auswählen. Finde auch nicht den fehler. Sollte doch bei Run so funktionieren?

Dann habe ich noch diese Fehlermeldung. Bin wirklich nicht der Profi und verstehe es auch nicht:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Mainfile.xml.main(xml.java:26)

und

beim debuggen

xml [Java Application]
Mainfile.xml at localhost:2019
Thread [main] (Suspended (exception ArrayIndexOutOfBoundsException))
xml.main(String[]) line: 26
C:\Program Files\Java\jre6\bin\javaw.exe (19.07.2011 13:40:29)


<terminated, exit value: 1>C:\Program Files\Java\jre6\bin\javaw.exe (19.07.2011 13:43:53)
 
Danke habe ich so gemacht.
Nun habe ich noch eine frage. Leider, wen man alles exportiert, speichert sich das in EINEM xml file ab. Das heisst man hat nun mehrere mscri und archivkey tags.

Wie kann man das zusätzlich hinzufügen, dass man nun statt alle files in einem ordner, einfach eine Datei durchliest und alle mscri tags in die richtigen archiv keys abfüllt?

Also die export datei schaut folgendermassen aus:
Die normale mit den tags bis zum schluss und dann die neue genau gleich. Also nicht irgendwie gemischte tags. die sind einfach nacheinander beim xml files von oben nach unten angehängt.
 
Was ich damit sagen will.
Ich kann nicht eine abfrage machen. Das genau der identische aufbau stattfinded. Da kann man die Elemente nicht unterscheiden und sagen, man soll das Mscri nehem welches nach dem element xy kommt, weil das unten genau gleich ist.

Man müsste das anders lösen. Halt eine for schlaufe oder so. von oben nach unten jedes Tag umwandeln und das in den archiv key reintun, aber da ist die schwierigkeit, dass halt alle variabeln (Elemente) gleich heissen und ich nicht weiss, ob er beim 2 mscri dann zum 1 archiv key springt und diesen abfüllt und nicht beim 2ten bleibt.

Möglich wäre vieleicht, wenn man den ersten durchlauf hat, diesen code zu cutten in eine neue datei zu speichern und das bei der alten base datei heraus zu löschen.

Man muss aber beachten, dass man alles dann in die gleiche neue Datei speichert und nicht verschiedene Dateien haben will und am schluss wieder eine ganze datei hat mit den 1000 xml files aneinader gereiht
 
du musst ein muster finden, an dem du erkennst welcher MSCRI tag zu welchem archivkey tag gehört. poste mal die export datei, dann tu ich mir leichter
 
<JOBS_UNIX client="0030" name="110_0212D_JU" system="UC4P">
das unterscheided die verschidenen xml files.

[Java]
<?xml version="1.0" encoding="ISO-8859-15" ?>
- <uc-export clientvers="6.00">
- <JOBS_UNIX client="0030" name="110_0212D_JU" system="UC4P">
- <XHEADER state="1">
<Title>Start Power Center process SBHRECON_ST_SAG</Title>
<Created>System UC4 on: 2007-06-14 14:21:42</Created>
<Modified>Jürg Reusser on: 2007-07-16 09:41:23 5 x</Modified>
<LastUsed />
<ArchiveKey1 />
<ArchiveKey2 />
<ExtRepDef>1</ExtRepDef>
<ExtRepAll>0</ExtRepAll>
<ExtRepNone>0</ExtRepNone>
</XHEADER>
- <SYNCREF state="1">
<Syncs />
</SYNCREF>
- <ATTR_JOBS state="1">
<StartType />
<HostDst>UNIX|SRD00061AX|HOST</HostDst>
<HostATTR_Type>UNIX</HostATTR_Type>
<CodeName />
<Login>LOGIN.UNIX_PMART</Login>
<IntAccount />
<AutoDeactNo>0</AutoDeactNo>
<AutoDeact1ErrorFree>0</AutoDeact1ErrorFree>
<AutoDeactErrorFree>0</AutoDeactErrorFree>
<DeactWhen />
<DeactDelay>0</DeactDelay>
<AutoDeactAlways>1</AutoDeactAlways>
<AttDialog>0</AttDialog>
<ActAtRun>1</ActAtRun>
<Consumption>0</Consumption>
<UC4Priority>0</UC4Priority>
<MaxParallel2>0</MaxParallel2>
<MpElse1>1</MpElse1>
<MpElse2>0</MpElse2>
<TZ />
</ATTR_JOBS>
- <ATTR_UNIX state="1">
<OutputDb>1</OutputDb>
<OutputDbErr>0</OutputDbErr>
<OutputFile>0</OutputFile>
<ShellScript>1</ShellScript>
<Command>0</Command>
<Priority>0</Priority>
<Shell />
<ShellOptions />
<Com />
</ATTR_UNIX>
- <RUNTIME state="1">
<MaxRetCode>0</MaxRetCode>
<FcstStatus>0|</FcstStatus>
<Ert>12</Ert>
<ErtMethodDef>1</ErtMethodDef>
<ErtMethodFix>0</ErtMethodFix>
<ErtFix>0</ErtFix>
<ErtDynMethod>2|Average</ErtDynMethod>
<ErtMethodDyn>0</ErtMethodDyn>
<ErtCnt>0</ErtCnt>
<ErtCorr>0</ErtCorr>
<ErtIgn>0</ErtIgn>
<ErtIgnFlg>0</ErtIgnFlg>
<ErtMinCnt>0</ErtMinCnt>
<MrtMethodNone>1</MrtMethodNone>
<MrtMethodFix>0</MrtMethodFix>
<MrtFix>0</MrtFix>
<MrtMethodErt>0</MrtMethodErt>
<MrtErt>0</MrtErt>
<MrtMethodDate>0</MrtMethodDate>
<MrtDays>0</MrtDays>
<MrtTime>00:00</MrtTime>
<MrtTZ />
<SrtMethodNone>1</SrtMethodNone>
<SrtMethodFix>0</SrtMethodFix>
<SrtFix>0</SrtFix>
<SrtMethodErt>0</SrtMethodErt>
<SrtErt>0</SrtErt>
<MrtCancel>0</MrtCancel>
<MrtExecute>0</MrtExecute>
<MrtExecuteObj />
</RUNTIME>
- <VALUE state="1">
<Values />
<Mode>0</Mode>
</VALUE>
- <PRE_SCRIPT state="1">
- <PSCRI>
- <![CDATA[ :SET &UNIX_CMD# = ". ./.profile"

]]>
</PSCRI>
</PRE_SCRIPT>
- <SCRIPT state="1">
- <MSCRI>
- <![CDATA[
:INCLUDE 110_0001X_IN
!
:SET &UNIX_CMD# = "&POWER_CENTER_SCRIPT# DESU_SBH:s_m_SBHRECON_ST_SAG"
:INCLUDE 000_UXCMD_IN
!


]]>
</MSCRI>
</SCRIPT>
- <POST_SCRIPT state="1">
<OSCRI />
</POST_SCRIPT>
- <DOCU_Docu state="1" type="text">
<DOC />
</DOCU_Docu>
- <DOCU_BJB_Docu- state="1" type="xml">
- <DOC>
- <![CDATA[
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE Changes [
<!ELEMENT Changes ( #PCDATA ) >
<!ATTLIST Changes Change_Date CDATA "null" >
<!ATTLIST Changes Change_Name CDATA "null" >
<!ATTLIST Changes Change_Test ( NOT_OK | OK ) "NOT_OK" >

<!ELEMENT Content ( #PCDATA | Changes | ErrorHandling )* >

<!ELEMENT ErrorHandling ( #PCDATA ) >
<!ATTLIST ErrorHandling Escalation ( NO | YES ) "NO" >
<!ATTLIST ErrorHandling Severity ( CRITICAL | FATAL | HARMLESS | MINOR | UNKNOWN | WARNING ) "UNKNOWN" >

]>
<Content>!! Free Text !!!!!!
<ErrorHandling Severity="FATAL" Escalation="YES">!! Free Text !!!!!!</ErrorHandling>
<Changes Change_Name="" Change_Test="NOT_OK" Change_Date="">!!! HISTORY !!!!!
</Changes>
</Content>


]]>
</DOC>
</DOCU_BJB_Docu->
</JOBS_UNIX>
- <JOBS_UNIX client="0030" name="110_0213D_JU" system="UC4P">
- <XHEADER state="1">
<Title>Start Power Center process SBHRECON_ST_NIMBUS</Title>
<Created>System UC4 on: 2007-06-14 14:21:42</Created>
<Modified>Jürg Reusser on: 2007-07-16 09:42:04 5 x</Modified>
<LastUsed />
<ArchiveKey1 />
<ArchiveKey2 />
<ExtRepDef>1</ExtRepDef>
<ExtRepAll>0</ExtRepAll>
<ExtRepNone>0</ExtRepNone>
</XHEADER>
- <SYNCREF state="1">
<Syncs />
</SYNCREF>
- <ATTR_JOBS state="1">
<StartType />
<HostDst>UNIX|SRD00061AX|HOST</HostDst>
<HostATTR_Type>UNIX</HostATTR_Type>
<CodeName />
<Login>LOGIN.UNIX_PMART</Login>
<IntAccount />
<AutoDeactNo>0</AutoDeactNo>
<AutoDeact1ErrorFree>0</AutoDeact1ErrorFree>
<AutoDeactErrorFree>0</AutoDeactErrorFree>
<DeactWhen />
<DeactDelay>0</DeactDelay>
<AutoDeactAlways>1</AutoDeactAlways>
<AttDialog>0</AttDialog>
<ActAtRun>1</ActAtRun>
<Consumption>0</Consumption>
<UC4Priority>0</UC4Priority>
<MaxParallel2>0</MaxParallel2>
<MpElse1>1</MpElse1>
<MpElse2>0</MpElse2>
<TZ />
</ATTR_JOBS>
- <ATTR_UNIX state="1">
<OutputDb>1</OutputDb>
<OutputDbErr>0</OutputDbErr>
<OutputFile>0</OutputFile>
<ShellScript>1</ShellScript>
<Command>0</Command>
<Priority>0</Priority>
<Shell />
<ShellOptions />
<Com />
</ATTR_UNIX>
- <RUNTIME state="1">
<MaxRetCode>0</MaxRetCode>
<FcstStatus>0|</FcstStatus>
<Ert>12</Ert>
<ErtMethodDef>1</ErtMethodDef>
<ErtMethodFix>0</ErtMethodFix>
<ErtFix>0</ErtFix>
<ErtDynMethod>2|Average</ErtDynMethod>
<ErtMethodDyn>0</ErtMethodDyn>
<ErtCnt>0</ErtCnt>
<ErtCorr>0</ErtCorr>
<ErtIgn>0</ErtIgn>
<ErtIgnFlg>0</ErtIgnFlg>
<ErtMinCnt>0</ErtMinCnt>
<MrtMethodNone>1</MrtMethodNone>
<MrtMethodFix>0</MrtMethodFix>
<MrtFix>0</MrtFix>
<MrtMethodErt>0</MrtMethodErt>
<MrtErt>0</MrtErt>
<MrtMethodDate>0</MrtMethodDate>
<MrtDays>0</MrtDays>
<MrtTime>00:00</MrtTime>
<MrtTZ />
<SrtMethodNone>1</SrtMethodNone>
<SrtMethodFix>0</SrtMethodFix>
<SrtFix>0</SrtFix>
<SrtMethodErt>0</SrtMethodErt>
<SrtErt>0</SrtErt>
<MrtCancel>0</MrtCancel>
<MrtExecute>0</MrtExecute>
<MrtExecuteObj />
</RUNTIME>
- <VALUE state="1">
<Values />
<Mode>0</Mode>
</VALUE>
- <PRE_SCRIPT state="1">
- <PSCRI>
- <![CDATA[ :SET &UNIX_CMD# = ". ./.profile"

]]>
</PSCRI>
</PRE_SCRIPT>
- <SCRIPT state="1">
- <MSCRI>
- <![CDATA[
:INCLUDE 110_0001X_IN
!
:SET &UNIX_CMD# = "&POWER_CENTER_SCRIPT# DESU_SBH:s_m_SBHRECON_ST_NIMBUS"
:INCLUDE 000_UXCMD_IN
!


]]>
</MSCRI>
</SCRIPT>
- <POST_SCRIPT state="1">
<OSCRI />
</POST_SCRIPT>
- <DOCU_Docu state="1" type="text">
<DOC />
</DOCU_Docu>
- <DOCU_BJB_Docu- state="1" type="xml">
- <DOC>
- <![CDATA[
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE Changes [
<!ELEMENT Changes ( #PCDATA ) >
<!ATTLIST Changes Change_Date CDATA "null" >
<!ATTLIST Changes Change_Name CDATA "null" >
<!ATTLIST Changes Change_Test ( NOT_OK | OK ) "NOT_OK" >

<!ELEMENT Content ( #PCDATA | Changes | ErrorHandling )* >

<!ELEMENT ErrorHandling ( #PCDATA ) >
<!ATTLIST ErrorHandling Escalation ( NO | YES ) "NO" >
<!ATTLIST ErrorHandling Severity ( CRITICAL | FATAL | HARMLESS | MINOR | UNKNOWN | WARNING ) "UNKNOWN" >

]>
<Content>!! Free Text !!!!!!
<ErrorHandling Severity="FATAL" Escalation="YES">!! Free Text !!!!!!</ErrorHandling>
<Changes Change_Name="" Change_Test="NOT_OK" Change_Date="">!!! HISTORY !!!!!
</Changes>
</Content>


]]>
</DOC>
</DOCU_BJB_Docu->
</JOBS_UNIX>
- <JOBS_UNIX client="0030" name="110_0214D_JU" system="UC4P">
- <XHEADER state="1">
<Title>Start Power Center process SBHRECON_ST_NESTLE</Title>
<Created>System UC4 on: 2007-06-14 14:21:42</Created>
<Modified>Jürg Reusser on: 2007-07-16 09:41:56 5 x</Modified>
<LastUsed />
<ArchiveKey1 />
<ArchiveKey2 />
<ExtRepDef>1</ExtRepDef>
<ExtRepAll>0</ExtRepAll>
<ExtRepNone>0</ExtRepNone>
</XHEADER>
- <SYNCREF state="1">
<Syncs />
</SYNCREF>
- <ATTR_JOBS state="1">
<StartType />
<HostDst>UNIX|SRD00061AX|HOST</HostDst>
<HostATTR_Type>UNIX</HostATTR_Type>
<CodeName />
<Login>LOGIN.UNIX_PMART</Login>
<IntAccount />
<AutoDeactNo>0</AutoDeactNo>
<AutoDeact1ErrorFree>0</AutoDeact1ErrorFree>
<AutoDeactErrorFree>0</AutoDeactErrorFree>
<DeactWhen />
<DeactDelay>0</DeactDelay>
<AutoDeactAlways>1</AutoDeactAlways>
<AttDialog>0</AttDialog>
<ActAtRun>1</ActAtRun>
<Consumption>0</Consumption>
<UC4Priority>0</UC4Priority>
<MaxParallel2>0</MaxParallel2>
<MpElse1>1</MpElse1>
<MpElse2>0</MpElse2>
<TZ />
</ATTR_JOBS>
- <ATTR_UNIX state="1">
<OutputDb>1</OutputDb>
<OutputDbErr>0</OutputDbErr>
<OutputFile>0</OutputFile>
<ShellScript>1</ShellScript>
<Command>0</Command>
<Priority>0</Priority>
<Shell />
<ShellOptions />
<Com />
</ATTR_UNIX>
- <RUNTIME state="1">
<MaxRetCode>0</MaxRetCode>
<FcstStatus>0|</FcstStatus>
<Ert>12</Ert>
<ErtMethodDef>1</ErtMethodDef>
<ErtMethodFix>0</ErtMethodFix>
<ErtFix>0</ErtFix>
<ErtDynMethod>2|Average</ErtDynMethod>
<ErtMethodDyn>0</ErtMethodDyn>
<ErtCnt>0</ErtCnt>
<ErtCorr>0</ErtCorr>
<ErtIgn>0</ErtIgn>
<ErtIgnFlg>0</ErtIgnFlg>
<ErtMinCnt>0</ErtMinCnt>
<MrtMethodNone>1</MrtMethodNone>
<MrtMethodFix>0</MrtMethodFix>
<MrtFix>0</MrtFix>
<MrtMethodErt>0</MrtMethodErt>
<MrtErt>0</MrtErt>
<MrtMethodDate>0</MrtMethodDate>
<MrtDays>0</MrtDays>
<MrtTime>00:00</MrtTime>
<MrtTZ />
<SrtMethodNone>1</SrtMethodNone>
<SrtMethodFix>0</SrtMethodFix>
<SrtFix>0</SrtFix>
<SrtMethodErt>0</SrtMethodErt>
<SrtErt>0</SrtErt>
<MrtCancel>0</MrtCancel>
<MrtExecute>0</MrtExecute>
<MrtExecuteObj />
</RUNTIME>
- <VALUE state="1">
<Values />
<Mode>0</Mode>
</VALUE>
- <PRE_SCRIPT state="1">
- <PSCRI>
- <![CDATA[ :SET &UNIX_CMD# = ". ./.profile"

]]>
</PSCRI>
</PRE_SCRIPT>
- <SCRIPT state="1">
- <MSCRI>
- <![CDATA[
:INCLUDE 110_0001X_IN
!
:SET &UNIX_CMD# = "&POWER_CENTER_SCRIPT# DESU_SBH:s_m_SBHRECON_ST_NESTLE"
:INCLUDE 000_UXCMD_IN
!


]]>
</MSCRI>
</SCRIPT>
- <POST_SCRIPT state="1">
<OSCRI />
</POST_SCRIPT>
- <DOCU_Docu state="1" type="text">
<DOC />
</DOCU_Docu>
- <DOCU_BJB_Docu- state="1" type="xml">
- <DOC>
- <![CDATA[
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE Changes [
<!ELEMENT Changes ( #PCDATA ) >
<!ATTLIST Changes Change_Date CDATA "null" >
<!ATTLIST Changes Change_Name CDATA "null" >
<!ATTLIST Changes Change_Test ( NOT_OK | OK ) "NOT_OK" >

<!ELEMENT Content ( #PCDATA | Changes | ErrorHandling )* >

<!ELEMENT ErrorHandling ( #PCDATA ) >
<!ATTLIST ErrorHandling Escalation ( NO | YES ) "NO" >
<!ATTLIST ErrorHandling Severity ( CRITICAL | FATAL | HARMLESS | MINOR | UNKNOWN | WARNING ) "UNKNOWN" >

]>
<Content>!! Free Text !!!!!!
<ErrorHandling Severity="FATAL" Escalation="YES">!! Free Text !!!!!!</ErrorHandling>
<Changes Change_Name="" Change_Test="NOT_OK" Change_Date="">!!! HISTORY !!!!!
</Changes>
</Content>


]]>
</DOC>
</DOCU_BJB_Docu->
</JOBS_UNIX>
- <JOBS_UNIX client="0030" name="110_0215D_JU" system="UC4P">
- <XHEADER state="1">
<Title>Start Power Center process SBHRECON_ST_SHARECOM</Title>
<Created>System UC4 on: 2007-06-14 14:21:42</Created>
<Modified>Jürg Reusser on: 2007-07-16 09:41:47 5 x</Modified>
<LastUsed />
<ArchiveKey1 />
<ArchiveKey2 />
<ExtRepDef>1</ExtRepDef>
<ExtRepAll>0</ExtRepAll>
<ExtRepNone>0</ExtRepNone>
</XHEADER>
- <SYNCREF state="1">
<Syncs />
</SYNCREF>
- <ATTR_JOBS state="1">
<StartType />
<HostDst>UNIX|SRD00061AX|HOST</HostDst>
<HostATTR_Type>UNIX</HostATTR_Type>
<CodeName />
<Login>LOGIN.UNIX_PMART</Login>
<IntAccount />
<AutoDeactNo>0</AutoDeactNo>
<AutoDeact1ErrorFree>0</AutoDeact1ErrorFree>
<AutoDeactErrorFree>0</AutoDeactErrorFree>
<DeactWhen />
<DeactDelay>0</DeactDelay>
<AutoDeactAlways>1</AutoDeactAlways>
<AttDialog>0</AttDialog>
<ActAtRun>1</ActAtRun>
<Consumption>0</Consumption>
<UC4Priority>0</UC4Priority>
<MaxParallel2>0</MaxParallel2>
<MpElse1>1</MpElse1>
<MpElse2>0</MpElse2>
<TZ />
</ATTR_JOBS>
- <ATTR_UNIX state="1">
<OutputDb>1</OutputDb>
<OutputDbErr>0</OutputDbErr>
<OutputFile>0</OutputFile>
<ShellScript>1</ShellScript>
<Command>0</Command>
<Priority>0</Priority>
<Shell />
<ShellOptions />
<Com />
</ATTR_UNIX>
- <RUNTIME state="1">
<MaxRetCode>0</MaxRetCode>
<FcstStatus>0|</FcstStatus>
<Ert>12</Ert>
<ErtMethodDef>1</ErtMethodDef>
<ErtMethodFix>0</ErtMethodFix>
<ErtFix>0</ErtFix>
<ErtDynMethod>2|Average</ErtDynMethod>
<ErtMethodDyn>0</ErtMethodDyn>
<ErtCnt>0</ErtCnt>
<ErtCorr>0</ErtCorr>
<ErtIgn>0</ErtIgn>
<ErtIgnFlg>0</ErtIgnFlg>
<ErtMinCnt>0</ErtMinCnt>
<MrtMethodNone>1</MrtMethodNone>
<MrtMethodFix>0</MrtMethodFix>
<MrtFix>0</MrtFix>
<MrtMethodErt>0</MrtMethodErt>
<MrtErt>0</MrtErt>
<MrtMethodDate>0</MrtMethodDate>
<MrtDays>0</MrtDays>
<MrtTime>00:00</MrtTime>
<MrtTZ />
<SrtMethodNone>1</SrtMethodNone>
<SrtMethodFix>0</SrtMethodFix>
<SrtFix>0</SrtFix>
<SrtMethodErt>0</SrtMethodErt>
<SrtErt>0</SrtErt>
<MrtCancel>0</MrtCancel>
<MrtExecute>0</MrtExecute>
<MrtExecuteObj />
</RUNTIME>
- <VALUE state="1">
<Values />
<Mode>0</Mode>
</VALUE>
- <PRE_SCRIPT state="1">
- <PSCRI>
- <![CDATA[ :SET &UNIX_CMD# = ". ./.profile"

]]>
</PSCRI>
</PRE_SCRIPT>
- <SCRIPT state="1">
- <MSCRI>
- <![CDATA[
:INCLUDE 110_0001X_IN
!
:SET &UNIX_CMD# = "&POWER_CENTER_SCRIPT# DESU_SBH:s_m_SBHRECON_ST_SHARECOM"
:INCLUDE 000_UXCMD_IN
!


]]>
</MSCRI>
</SCRIPT>
- <POST_SCRIPT state="1">
<OSCRI />
</POST_SCRIPT>
- <DOCU_Docu state="1" type="text">
<DOC />
</DOCU_Docu>
- <DOCU_BJB_Docu- state="1" type="xml">
- <DOC>
- <![CDATA[
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE Changes [
<!ELEMENT Changes ( #PCDATA ) >
<!ATTLIST Changes Change_Date CDATA "null" >
<!ATTLIST Changes Change_Name CDATA "null" >
<!ATTLIST Changes Change_Test ( NOT_OK | OK ) "NOT_OK" >

<!ELEMENT Content ( #PCDATA | Changes | ErrorHandling )* >

<!ELEMENT ErrorHandling ( #PCDATA ) >
<!ATTLIST ErrorHandling Escalation ( NO | YES ) "NO" >
<!ATTLIST ErrorHandling Severity ( CRITICAL | FATAL | HARMLESS | MINOR | UNKNOWN | WARNING ) "UNKNOWN" >

]>
<Content>!! Free Text !!!!!!
<ErrorHandling Severity="FATAL" Escalation="YES">!! Free Text !!!!!!</ErrorHandling>
<Changes Change_Name="" Change_Test="NOT_OK" Change_Date="">!!! HISTORY !!!!!
</Changes>
</Content>


]]>
</DOC>
</DOCU_BJB_Docu->
</JOBS_UNIX>
- <JOBS_UNIX client="0030" name="110_0220D_JU" system="UC4P">
- <XHEADER state="1">
<Title>Start Power Center process SBHRECON_BESTAND_AKTIENREGISTER</Title>
<Created>System UC4 on: 2007-06-14 14:21:42</Created>
<Modified>Jürg Reusser on: 2007-07-16 09:41:38 5 x</Modified>
<LastUsed />
<ArchiveKey1 />
<ArchiveKey2 />
<ExtRepDef>1</ExtRepDef>
<ExtRepAll>0</ExtRepAll>
<ExtRepNone>0</ExtRepNone>
</XHEADER>
- <SYNCREF state="1">
<Syncs />
</SYNCREF>
- <ATTR_JOBS state="1">
<StartType />
<HostDst>UNIX|SRD00061AX|HOST</HostDst>
<HostATTR_Type>UNIX</HostATTR_Type>
<CodeName />
<Login>LOGIN.UNIX_PMART</Login>
<IntAccount />
<AutoDeactNo>0</AutoDeactNo>
<AutoDeact1ErrorFree>0</AutoDeact1ErrorFree>
<AutoDeactErrorFree>0</AutoDeactErrorFree>
<DeactWhen />
<DeactDelay>0</DeactDelay>
<AutoDeactAlways>1</AutoDeactAlways>
<AttDialog>0</AttDialog>
<ActAtRun>1</ActAtRun>
<Consumption>0</Consumption>
<UC4Priority>0</UC4Priority>
<MaxParallel2>0</MaxParallel2>
<MpElse1>1</MpElse1>
<MpElse2>0</MpElse2>
<TZ />
</ATTR_JOBS>
- <ATTR_UNIX state="1">
<OutputDb>1</OutputDb>
<OutputDbErr>0</OutputDbErr>
<OutputFile>0</OutputFile>
<ShellScript>1</ShellScript>
<Command>0</Command>
<Priority>0</Priority>
<Shell />
<ShellOptions />
<Com />
</ATTR_UNIX>
- <RUNTIME state="1">
<MaxRetCode>0</MaxRetCode>
<FcstStatus>0|</FcstStatus>
<Ert>12</Ert>
<ErtMethodDef>1</ErtMethodDef>
<ErtMethodFix>0</ErtMethodFix>
<ErtFix>0</ErtFix>
<ErtDynMethod>2|Average</ErtDynMethod>
<ErtMethodDyn>0</ErtMethodDyn>
<ErtCnt>0</ErtCnt>
<ErtCorr>0</ErtCorr>
<ErtIgn>0</ErtIgn>
<ErtIgnFlg>0</ErtIgnFlg>
<ErtMinCnt>0</ErtMinCnt>
<MrtMethodNone>1</MrtMethodNone>
<MrtMethodFix>0</MrtMethodFix>
<MrtFix>0</MrtFix>
<MrtMethodErt>0</MrtMethodErt>
<MrtErt>0</MrtErt>
<MrtMethodDate>0</MrtMethodDate>
<MrtDays>0</MrtDays>
<MrtTime>00:00</MrtTime>
<MrtTZ />
<SrtMethodNone>1</SrtMethodNone>
<SrtMethodFix>0</SrtMethodFix>
<SrtFix>0</SrtFix>
<SrtMethodErt>0</SrtMethodErt>
<SrtErt>0</SrtErt>
<MrtCancel>0</MrtCancel>
<MrtExecute>0</MrtExecute>
<MrtExecuteObj />
</RUNTIME>
- <VALUE state="1">
<Values />
<Mode>0</Mode>
</VALUE>
- <PRE_SCRIPT state="1">
- <PSCRI>
- <![CDATA[ :SET &UNIX_CMD# = ". ./.profile"

]]>
</PSCRI>
</PRE_SCRIPT>
- <SCRIPT state="1">
- <MSCRI>
- <![CDATA[
:INCLUDE 110_0001X_IN
!
:SET &UNIX_CMD# = "&POWER_CENTER_SCRIPT# DESU_SBH:s_m_SBHRECON_BESTAND_AKTIENREGISTER"
:INCLUDE 000_UXCMD_IN
!


]]>
</MSCRI>
</SCRIPT>
- <POST_SCRIPT state="1">
<OSCRI />
</POST_SCRIPT>
- <DOCU_Docu state="1" type="text">
<DOC />
</DOCU_Docu>
- <DOCU_BJB_Docu- state="1" type="xml">
- <DOC>
- <![CDATA[
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE Changes [
<!ELEMENT Changes ( #PCDATA ) >
<!ATTLIST Changes Change_Date CDATA "null" >
<!ATTLIST Changes Change_Name CDATA "null" >
<!ATTLIST Changes Change_Test ( NOT_OK | OK ) "NOT_OK" >

<!ELEMENT Content ( #PCDATA | Changes | ErrorHandling )* >

<!ELEMENT ErrorHandling ( #PCDATA ) >
<!ATTLIST ErrorHandling Escalation ( NO | YES ) "NO" >
<!ATTLIST ErrorHandling Severity ( CRITICAL | FATAL | HARMLESS | MINOR | UNKNOWN | WARNING ) "UNKNOWN" >

]>
<Content>!! Free Text !!!!!!
<ErrorHandling Severity="FATAL" Escalation="YES">!! Free Text !!!!!!</ErrorHandling>
<Changes Change_Name="" Change_Test="NOT_OK" Change_Date="">!!! HISTORY !!!!!
</Changes>
</Content>


]]>
</DOC>
</DOCU_BJB_Docu->
</JOBS_UNIX>
- <JOBS_UNIX client="0030" name="110_0221D_JU" system="UC4P">
- <XHEADER state="1">
<Title>Start Power Center process SBHRECON_EXTERN_BESTAND</Title>
<Created>System UC4 on: 2007-06-14 14:21:42</Created>
<Modified>Jürg Reusser on: 2007-07-16 09:41:30 5 x</Modified>
<LastUsed />
<ArchiveKey1 />
<ArchiveKey2 />
<ExtRepDef>1</ExtRepDef>
<ExtRepAll>0</ExtRepAll>
<ExtRepNone>0</ExtRepNone>
</XHEADER>
- <SYNCREF state="1">
<Syncs />
</SYNCREF>
- <ATTR_JOBS state="1">
<StartType />
<HostDst>UNIX|SRD00061AX|HOST</HostDst>
<HostATTR_Type>UNIX</HostATTR_Type>
<CodeName />
<Login>LOGIN.UNIX_PMART</Login>
<IntAccount />
<AutoDeactNo>0</AutoDeactNo>
<AutoDeact1ErrorFree>0</AutoDeact1ErrorFree>
<AutoDeactErrorFree>0</AutoDeactErrorFree>
<DeactWhen />
<DeactDelay>0</DeactDelay>
<AutoDeactAlways>1</AutoDeactAlways>
<AttDialog>0</AttDialog>
<ActAtRun>1</ActAtRun>
<Consumption>0</Consumption>
<UC4Priority>0</UC4Priority>
<MaxParallel2>0</MaxParallel2>
<MpElse1>1</MpElse1>
<MpElse2>0</MpElse2>
<TZ />
</ATTR_JOBS>
- <ATTR_UNIX state="1">
<OutputDb>1</OutputDb>
<OutputDbErr>0</OutputDbErr>
<OutputFile>0</OutputFile>
<ShellScript>1</ShellScript>
<Command>0</Command>
<Priority>0</Priority>
<Shell />
<ShellOptions />
<Com />
</ATTR_UNIX>
- <RUNTIME state="1">
<MaxRetCode>0</MaxRetCode>
<FcstStatus>0|</FcstStatus>
<Ert>12</Ert>
<ErtMethodDef>1</ErtMethodDef>
<ErtMethodFix>0</ErtMethodFix>
<ErtFix>0</ErtFix>
<ErtDynMethod>2|Average</ErtDynMethod>
<ErtMethodDyn>0</ErtMethodDyn>
<ErtCnt>0</ErtCnt>
<ErtCorr>0</ErtCorr>
<ErtIgn>0</ErtIgn>
<ErtIgnFlg>0</ErtIgnFlg>
<ErtMinCnt>0</ErtMinCnt>
<MrtMethodNone>1</MrtMethodNone>
<MrtMethodFix>0</MrtMethodFix>
<MrtFix>0</MrtFix>
<MrtMethodErt>0</MrtMethodErt>
<MrtErt>0</MrtErt>
<MrtMethodDate>0</MrtMethodDate>
<MrtDays>0</MrtDays>
<MrtTime>00:00</MrtTime>
<MrtTZ />
<SrtMethodNone>1</SrtMethodNone>
<SrtMethodFix>0</SrtMethodFix>
<SrtFix>0</SrtFix>
<SrtMethodErt>0</SrtMethodErt>
<SrtErt>0</SrtErt>
<MrtCancel>0</MrtCancel>
<MrtExecute>0</MrtExecute>
<MrtExecuteObj />
</RUNTIME>
- <VALUE state="1">
<Values />
<Mode>0</Mode>
</VALUE>
- <PRE_SCRIPT state="1">
- <PSCRI>
- <![CDATA[ :SET &UNIX_CMD# = ". ./.profile"

]]>
</PSCRI>
</PRE_SCRIPT>
- <SCRIPT state="1">
- <MSCRI>
- <![CDATA[
:INCLUDE 110_0001X_IN
!
:SET &UNIX_CMD# = "&POWER_CENTER_SCRIPT# DESU_SBH:s_m_SBHRECON_EXTERN_BESTAND"
:INCLUDE 000_UXCMD_IN
!


]]>
</MSCRI>
</SCRIPT>
- <POST_SCRIPT state="1">
<OSCRI />
</POST_SCRIPT>
- <DOCU_Docu state="1" type="text">
<DOC />
</DOCU_Docu>
- <DOCU_BJB_Docu- state="1" type="xml">
- <DOC>
- <![CDATA[
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE Changes [
<!ELEMENT Changes ( #PCDATA ) >
<!ATTLIST Changes Change_Date CDATA "null" >
<!ATTLIST Changes Change_Name CDATA "null" >
<!ATTLIST Changes Change_Test ( NOT_OK | OK ) "NOT_OK" >

<!ELEMENT Content ( #PCDATA | Changes | ErrorHandling )* >

<!ELEMENT ErrorHandling ( #PCDATA ) >
<!ATTLIST ErrorHandling Escalation ( NO | YES ) "NO" >
<!ATTLIST ErrorHandling Severity ( CRITICAL | FATAL | HARMLESS | MINOR | UNKNOWN | WARNING ) "UNKNOWN" >

]>
<Content>!! Free Text !!!!!!
<ErrorHandling Severity="FATAL" Escalation="YES">!! Free Text !!!!!!</ErrorHandling>
<Changes Change_Name="" Change_Test="NOT_OK" Change_Date="">!!! HISTORY !!!!!
</Changes>
</Content>


]]>
</DOC>
</DOCU_BJB_Docu->
</JOBS_UNIX>
</uc-export>

[/code]
 
Also ich hab nun eine code welcher sich am JOB Unix Tag orientiert. Aber irgendwie nimmt er trozdem nur immer den ersten MSCRI tag.
Komischerweise aber, trägt er den in sämtliche ArchiveKey tags ein. Und die zeilen sind identisch! verstehe nicht, wieso es beim archivkey geht und beim mscri nicht.

[Java]
import java.io.File;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;


/**
* Allows to parse a directory of xml-files. Parsing means in this context to add a special-content to the
* ArchiveKey2Tag. There is also a method to save this edited files into a new directory.
* @author ubrunner
*
*/
public class UC4ArchiveKey
{
//xml-File, which we have to parse
File xmlFile = null;
//list with files, which has been parsed (see XMLFileCombo for infos to the XMLFileCombo-type)
Document doc;

public UC4ArchiveKey(String xmlFilePath)
{
this.xmlFile = new File(xmlFilePath);
this.doc = null;
}

/**
* Parse the specified XML-Document
*/
public void parseDocument()
{
try
{
//Parse the file with a XML-DOM-Parser
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
this.doc = db.parse(this.xmlFile);
}
catch (Exception e)
{
System.out.print("Problem parsing the file.");
}

// Create a new XPath instance (XPath is an XML-equivalent to SQL, used to search nodes in an XML-File for example)
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();

//split the XML-file by JOB_UNIX-tags
NodeList job_unixTags = null;
try {
job_unixTags = (NodeList)xpath.evaluate("//JOBS_UNIX",this.doc, XPathConstants.NODESET);
} catch (XPathExpressionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println(job_unixTags.getLength()+ " JOB_UNIX-Tags found!");

for(int i = 0; i<job_unixTags.getLength();i++)
{
Element jobTag = (Element)job_unixTags.item(i);
parseSingleJobTag(jobTag,xpath);
}
}

/**
* Parse a single JOBS_UNIX-tag bye finding the mscri-Tag, and extracting this content to the ArchiveKey2-Tag
* @param tagToParse
* @return parsing this tagToParse was successfull
*/
private boolean parseSingleJobTag(Element tagToParse,XPath xPathExpression)
{

try
{
//Find the MSCRI-tag with an XPath-expression
Element mscriTag = (Element)xPathExpression.evaluate("descendant-or-self::MSCRI",tagToParse, XPathConstants.NODE);
String mscriContent = mscriTag.getFirstChild().getTextContent();
System.out.println("mscri-Tag: "+mscriContent);

//extract the needed part from the MSCRI-tag with a regular expression
Pattern p = Pattern.compile("(POWER_CENTER_SCRIPT# )(.*)(\"\n:INCLUDE 000_UXCMD_IN)");
Matcher m = p.matcher(mscriContent);
System.out.println("Pattern is " + m.pattern());

if(m.find())
{
//if found, add a new text node the the ArchiveKey2-Tag (which has to be found with an other XPath-expression)
String foundContent = m.group(2);
System.out.println(m.start() + " " + foundContent);

Element archiveKeyElement = (Element)xPathExpression.evaluate("descendant-or-self::ArchiveKey2",tagToParse, XPathConstants.NODE);
archiveKeyElement.appendChild(this.doc.createTextNode(foundContent));
}
else
{
System.out.println("Didn't found pattern!");
return false;
}
}
catch (XPathExpressionException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}

/**
* Save the edited xml-file to a specified path.
* @param newDir
*/
public void saveEditedFile(String newPath)
{
try
{
Source source = new DOMSource(this.doc);
// 2. Create a StreamResult from the output file
File file = new File(newPath);
Result result = new StreamResult(file);
// 3. Create a Transformer from the TransformerFactory

Transformer xformer = TransformerFactory.newInstance().newTransformer();

// Configure (damit die Ausgabe etwas schoener aussieht)
xformer.setOutputProperty(OutputKeys.INDENT, "yes");
xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");

xformer.transform(source, result);
}
catch (TransformerConfigurationException e)
{
System.out.println("TransformerConfigurationException: " + e);
}
catch (TransformerException e)
{
System.out.println("TransformerException: " + e);
}
}
}


[/Java]
 

Zurück
Oben