[Code] XML Werte umwandeln?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von grimes, 1. Mai 2012 .

Schlagworte:
  1. 1. Mai 2012
    XML Werte umwandeln?

    hallo. ich habe hier zwei xml dateien. sie sind sich von der größe und aufbau identisch, ausser, dass viele werte verdreht sind.

    Code:
    <?xml version="1.0" encoding="utf-8" ?> 
    - <!-- This is the meta XML file for a t3db database.
     --> 
    - <database name="fifa_ng_db" shortname="bd_g" writename="fifa_ng_db_write" writeshortname="etir" version="6">
     <parameters /> 
    - <indices>
    - <index shortname="SCWd" tableshortname="LSIk">
    - <indexfields>
     <indexfield shortname="QCwf" sortdirection="0" /> 
     <indexfield shortname="gXCm" sortdirection="0" /> 
     </indexfields>
     </index>
    - <index shortname="zOGE" tableshortname="JVQt">
    - <indexfields>
     <indexfield shortname="lGGF" sortdirection="0" /> 
     </indexfields>
     </index>
    - <index shortname="VjNe" tableshortname="Pcwy">
    - <indexfields>
     <indexfield shortname="qFky" sortdirection="0" /> 
     </indexfields>
     </index>
    - <index shortname="DJXE" tableshortname="OArZ">
    - <indexfields>
     <indexfield shortname="qFky" sortdirection="0" /> 
     </indexfields>
     </index>
    
    Code:
     <?xml version="1.0" encoding="utf-8" ?> 
    - <!-- This is the meta XML file for a t3db database.
     --> 
    - <database name="fifa_ng_db" shortname="g_db" writename="fifa_ng_db_write" writeshortname="rite" version="6">
     <parameters /> 
    - <indices>
    - <index shortname="dWCS" tableshortname="kISL">
    - <indexfields>
     <indexfield shortname="fwCQ" sortdirection="0" /> 
     <indexfield shortname="mCXg" sortdirection="0" /> 
     </indexfields>
     </index>
    - <index shortname="EGOz" tableshortname="tQVJ">
    - <indexfields>
     <indexfield shortname="FGGl" sortdirection="0" /> 
     </indexfields>
     </index>
    - <index shortname="eNjV" tableshortname="ywcP">
    - <indexfields>
     <indexfield shortname="ykFq" sortdirection="0" /> 
     </indexfields>
     </index>
    - <index shortname="EXJD" tableshortname="ZrAO">
    - <indexfields>
     <indexfield shortname="ykFq" sortdirection="0" /> 
     </indexfields>
     </index>
    inwiefern unterscheiden sich die beiden und kann man die erste zur zweiten umwandeln und wieder zurück?
    einmal umwandeln, werte mit einem tool ändern und wieder zurück umwandeln.


    danke
     
  2. 3. Mai 2012
    AW: XML Werte umwandeln?

    Wie du selbst bemerkt haben solltest, sind viele der XML-Attribut-Werte umgedreht, aber eben nicht alle. Solange du keine eindeutige Regel aufstellen kannst, in welchen Fällen der Wert umgedreht ist und in welchem nicht, ist eine automatische Umwandlung natürlich nicht möglich.
    Wenn es diese Regel aber gibt, ist es doch kein Problem das ganze in einer Sprache deiner Wahl einzulesen und die Attribute einmal umzudrehen?!
     
    1 Person gefällt das.
  3. 3. Mai 2012
    AW: XML Werte umwandeln?

    Hallo grimes,
    schau dir mal folgende Module an:
    http://search.cpan.org/~grantm/XML-Simple-2.18/lib/XML/Simple.pm
    XML: arser - search.cpan.org

    Aber wie schon Chillikid meinte, da muss du dir zuerst ein Algorithmus ausdenken, um sie zu sortieren.

    Grüße
    Kirill
     
    1 Person gefällt das.
  4. 4. Mai 2012
    AW: XML Werte umwandeln?

    Diff Checker - Online diff tool to compare text to find the difference between two text files

    Hä? ja, Strg+A, Strg+C, Strg+V


    Zum dem was meine Vorposter gesagt haben: doch, natürlich ist ein Muster zu erkennen. Jedes Attribut das "short" enthält ist in den Files reversed. Sollte kein großer Act sein da was zu coden.

    Für XML-Transformation bietet sich btw XSLT an

    Bitte

    Gruß, Figger
     
  5. 4. Mai 2012
    AW: XML Werte umwandeln?

    Weil hier einige nach dem Schma/Algo fragen.

    Alle short* attribute der Tags sind gespiegelt. Das dürfte kein Problem sein, dies in einer beliebigen Sprache zu coden. Zur Not sogar in bash.
     
  6. 4. Mai 2012
    Zuletzt bearbeitet: 4. Mai 2012
    AW: XML Werte umwandeln?

    Code:
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class XMLPropertyReverse {
    
     public static final String inputFile = "[B]in.xml[/B]";
     public static final String outputFile = "[B]out.xml[/B]";
    
     public static final Pattern reverseTagPattern = Pattern.compile(
     "[B](shortname=\")((?:[a-z][a-z0-9_]*))(\")[/B]", Pattern.CASE_INSENSITIVE
     | Pattern.DOTALL);
     public static final int reverseTagPatternValueGroup = [B]2[/B];
    
     public static void main(String[] args) {
     List<String> oldLineList = readFile(new File(inputFile));
     List<String> reversedLineList = new ArrayList<String>();
     
     for (String line : oldLineList) {
     System.out.println(reversePropertiesOfLine(line));
     reversedLineList.add(reversePropertiesOfLine(line));
     }
    
     writeFile(new File(outputFile), reversedLineList);
     }
    
     public static List<String> readFile(File file) {
     ArrayList<String> lineList = new ArrayList<String>();
     try {
     BufferedReader bufferedReader = new BufferedReader(new FileReader(
     file));
     while (true) {
     String line = bufferedReader.readLine();
     if (line == null)
     break;
     lineList.add(line);
     }
     } catch (Exception e) {
     e.printStackTrace();
     }
     return lineList;
     }
    
     public static String reversePropertiesOfLine(String line) {
     if (line == null)
     return line;
     Matcher tagMatcher = reverseTagPattern.matcher(line);
     while (tagMatcher.find()) {
    
     String oldValue = tagMatcher.group(reverseTagPatternValueGroup);
     String reversedValue = new StringBuffer(
     tagMatcher.group(reverseTagPatternValueGroup)).reverse()
     .toString();
    
     String oldProperty = tagMatcher.toMatchResult().group();
     String newProperty = oldProperty.replace(oldValue, reversedValue);
     
     line = line.replace(oldProperty, newProperty);
     }
    
     return line;
     }
    
     public static void writeFile(File file, List<String> lineList) {
     try {
     if (!file.exists())
     file.createNewFile();
     BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(
     file, false));
     for (String line : lineList) {
     bufferedWriter.write(line + "\n");
     }
     bufferedWriter.close();
    
     } catch (Exception e) {
     e.printStackTrace();
     }
     }
    
    }
    
    Habs auf die Schnelle gebaut, musst mal testen ob das mit allen Dateien von dir funktioniert. Solange sie allerdings dem Schema folgen, dass du vorgegeben hast sollte es stabil sein. Ansonsten die Konstanten anpassen. Mir war die Aufgabe zu simpel um jetzt irgendwelche externen XML-Libraries zu verwenden, sehe keinen Grund dazu.
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.