WinFuture-Forum.de: Mit XSLT XML-String zerlegen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Mit XSLT XML-String zerlegen


#1 Mitglied ist offline   Fr0st 

geschrieben 08. September 2013 - 15:45

Guten Abend,
Ich hoffe ich bin mit meinem Problem im richtigen bereich
gibt es eine einfache Möglichkeit aus:
<test>
  <aufg1>
    <text ausgabe="Ein Test 1,2,3 Ein Test" />
  </aufg1>
  <aufg2>
    <text ausgabe="Zweiter Test 2,3 Ein Test" />
  </aufg2>
</test>



So eine Ausgabe zu generieren?

<test>
    <aufg1>
      <text>Ein Test Ein Test</text>
      <eins>ja</eins>
      <zwei>ja</zwei>
      <drei>nein</drei>
    </aufg1>
    <aufgw>
      <text>zweiter Zest Ein Test</text>
      <eins>ja</eins>
      <zwei>ja</zwei>
      <drei>nein</drei>
    </aufgw>
</test>



Würde mich über eine leine Hilfestellungfreuen :-)
0

Anzeige



#2 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 08. September 2013 - 15:58

Soll das tatsächlich so sein oder sind da noch Tippfehler drin?

also soll <aufgw> unten nicht vielleicht doch <aufg2> heißen und wieso wird aus unterschiedlichen Ausgaben das gleiche Ergebnis und woraus ergeben sich die ja, ja, nein ?

Beim Ersten wird aus "1,2,3"

<eins>ja</eins>
<zwei>ja</zwei>
<drei>nein</drei>

und beim Zweiten wird aus "2,3" auch

<eins>ja</eins>
<zwei>ja</zwei>
<drei>nein</drei>

ohne erkennbaren Grund für ja oder nein.

Dieser Beitrag wurde von Holger_N bearbeitet: 08. September 2013 - 15:58

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#3 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 08. September 2013 - 16:04

Sehe da grad nicht, wie das mit XSLT zu machen gehen soll. :unsure:

Immerhin ist das ja nur einfacher Text, ohne jeden Hinweis darauf, daß da noch weitere Information drinsteckt... und wo... und wie man da rankommt.

Man könnte natürlich schauen, ob es Gemeinsamkeiten über alle Felder gibt, und dann (bspw) die ersten X und die letzten Y Zeichen wegwerfen, oder nach ',' suchen, oder was auch immer; aber man riskiert immer, daß irgendwo irgendein Taginhalt querschießt.


Ich persönlich würde auch sed dafür nehmen, oder sonst eine regex-basierte Textersetzungsmethode... und das auch nur dann, wenn händisches Umschreiben wirklich nicht drin ist.

- So oder so wird das fehleranfällig. Bei XML gilt grundsätzlich immer: was nicht in der Struktur steckt, da kommt man auch nicht ran.


Holger: Das Problem ist schon recht klar: aus Plaintext sollen Booleans abgeleitet werden; aus [[ "2" steht im Text ]] soll
<zwei>ja</zwei>
werden.

Problem ist halt, daß das nicht so ohne weiteres geht mangels Struktur.

Dieser Beitrag wurde von RalphS bearbeitet: 08. September 2013 - 16:08

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#4 Mitglied ist offline   Fr0st 

geschrieben 08. September 2013 - 16:35

ja sry da sind Tippfehler drinn, habe es aus dem Kopf geschrieben um es etwas einfacher zu verdeutlichen.
Das Problem ist einfach (und das liegt nicht an mir) Das ich einen XML File habe in dem es mehrere Auflistungen gibt, Diese Auflistungen Haben Attribute in denen Sowohl Text als auch mitten drinn Zahlen stehen die wie Ralph es schon gesagt hat boolean sind.
Ich habe zwar schon im Internet das ein oder andere gesehen, aber wie auch schon gesagt wurde steckt dort eine Bessere Struktur dahinter die bei mir nicht gegeben ist (wie gesagt das liegt nicht an mir ist ein Export aus einem anderen Programm)

Geht es eventuell mit einer Anderen Sprache besser? Java z.b.?
0

#5 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 08. September 2013 - 17:30

Beitrag anzeigenZitat (RalphS: 08. September 2013 - 16:04)


Holger: Das Problem ist schon recht klar: aus Plaintext sollen Booleans abgeleitet werden; aus [[ "2" steht im Text ]] soll
<zwei>ja</zwei>
werden.

Problem ist halt, daß das nicht so ohne weiteres geht mangels Struktur.


aus "1,2,3" was irgendwo im Text steht wird:

<eins>ja</eins>
<zwei>ja</zwei>
<drei>nein</drei>

klar, aber woraus leitet sich "ja" oder "nein" ab?

Nehmen wir an im Text steht 1,2,3,4

was kommt dann raus?

<eins>ja</eins>
<zwei>ja</zwei>
<drei>nein</drei>
<vier>?</vier>
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#6 Mitglied ist offline   Fr0st 

geschrieben 08. September 2013 - 18:10

wie gesagt ich habe mich verschrieben
1,2,3
<eins>ja</eins>
<zwei>ja</zwei>
<drei>ja</drei>

oder es würde auch

<eins var="true"></eins>
<zwei var="true"></zwei>
<drei var="true"></drei>

gehen
0

#7 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 08. September 2013 - 18:12

Nicht ganz: die Transformation ist letztlich

Zahlwert (zB "1") => <ZAHLWORT>Bool:Wert eingetragen?</ZAHLWORT>

Machbar wäre das, wie gesagt, zB mit sed(1). Nur mit XSLT seh ich da schwarz. :huh:


Aber auch dann wirds interessant. Man müßte pro Zahlwert einen Pass drüberlaufen lassen, damit auch wirklich aus jeder Zahl ein Zahlwort werden kann (unter der Annahme, daß es endlich viele Zahlwerte sind, sagen wir 0-9 --- sonst geht's gar nicht). Diese müßte man dann vom Kontext abhängig machen, damit in -text- DUMMY ZAHL DUMMY -/text- das ZAHL mit -ZAHLWORT- ja -/ZAHLWORT- ersetzt werden kann und der Rest stehen bleibt. Gleichzeitig müßte man einen fehlgeschlagenen Match abfangen und mit -ZAHLWORT- nein -/ZAHLWORT- ersetzen (wo das eingetragen werden soll, darauf gehe ich mal lieber gar nicht erst ein).
Das Ganze müßte man dann mehrmals (hier: 10mal) ausführen.

Problem: Den Moment, wo in DUMMY eine Zahl steckt... geht es schief. Und das läßt sich auch nicht filtern, solange es keine weitere erkennbare Struktur gibt. Und wenn in Dummy eine Zahl steht und es aber keine "richtige" Zahl gibt (die tatsächlich ersetzt werden soll), geht es komplett schief.



Daher: Hand anlegen. Oder, je nachdem wo die originale XML herkommt, neu generieren... und zwar so, daß die Zahlwerte irgendwo isoliert stehen.

Also entweder
<tag>
TEXT
<zahl_a>1</zahl_a>
<zahl_b>2</zahl_b>
MEHR TEXT
</tag>



oder aber
<tag zahl_a="1" zahl_b="2">TEXT</tag>

.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#8 Mitglied ist offline   Fr0st 

geschrieben 10. September 2013 - 06:00

Also ich versuche eine Java Lösung hin zu bekommen, da kenne ich mich einfach besser damit aus. XSLT wäre zwar passender gewesen aber mal sehen. Werde weiter probieren aber hauptsächlich wie gesagt das ganze mal mit Java machen.

Danke für die Hilfe hier. sollte ich es mit XSLT hinbekommen schreibe ich es ;-)
0

#9 Mitglied ist offline   Mondragor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 391
  • Beigetreten: 22. Februar 12
  • Reputation: 44
  • Geschlecht:Männlich

geschrieben 13. September 2013 - 11:19

Hallo Fr0st

Es ist auch wirklich schwer, Dir mehr zu sagen, wenn wir die Anforderungsdefinitionen nicht kennen bzw. aus dem Beispiel im ersten Beitrag wird nicht klar, wo da Grenzen sind.
Eine etwas genauere Erklärung hierzu wäre etwas hilfreicher. Letztlich geht es hier ja wahrscheinlich um eine automatisierte Sache, die öfter angewandt wird, also muss man ja irgendwelche restriktionen haben, um überhaupt eine Aussage zu treffen. Wenn man die kennt, ist es nicht schwer, z.B. in Java das ganze zu realisieren. Da is man dann für alle Fehler selbst verantwortlich ;)
Momentan sieht das für mich aus, wie die XML-Ergebnisform eines Multiple Choice Tests oder etwas in der Art. Dann stünden die Zahlen die in der exportform stehen, für die Punkte, die angekreuzt wurden, daher boolean.

Dieser Beitrag wurde von Mondragor bearbeitet: 13. September 2013 - 11:25

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0