Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6194[/thread]

XML / Perl



<< >> 9 Einträge, 1 Seite
Gast Gast
 2004-04-15 17:32
#81597 #81597
Hallo,

Weiss jemand, wie man mehrere XML-FIles in eine einzige XML-File durch Perl zusammenfügen könnte? Die neue XML-File muss wellformed sein. Wenn jemand mit sowas Erfahrung hat, würde mich auf seinen Antwort freuen. Danke im voraus!

St.
format_c
 2004-04-15 18:07
#81598 #81598
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Das kommt ganz auf die Struktur und damit resultierend auf die Ein- bzw. Ausleseparameter.
Kannst du bitte mal kurz das Schema beider Dateien zeigen (wenn zu groß nur vom prinzip) und welches Schema am Ende (dritte Datei) raus kommen soll.

Ich hab schon etwas damit gemacht, da unsere Linksammlung auf XML basiert und Logfiles auch in XML geführt werden.

Gruß Alex

edit esskar: link gefixt\n\n

<!--EDIT|esskar|1082053262-->
Steffi
 2004-04-20 13:56
#81599 #81599
User since
2004-04-20
3 Artikel
BenutzerIn
[default_avatar]
Also ich habe eine XML-Datei, aus der die Titelseite, das Inhaltsverzeichnis, das Index usw in den Output PDF Datei rauskommen soll + ich habe mehrere XML-Blockdateien, die den Inhalt der Output  PDF Datei bestimmen. DIe sehen so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by bakerman (test) -->
<?xmlspysps K:\SimProject\Simulink.sps?>
<?xmlspyxslfo genfo.xsl?>
<SimulinkBlock xmlns="http://www.xmlspy.com/schemas/orgchart" xmlns:ipo="http://www.altova.com/IPO"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.xmlspy.com/schemas/orgchart
simulink.xsd">
<Name>Direct Look-Up Table (n-D)</Name>
<Purpose>Index into an N-dimensional table to retrieve a scalar, vector or 2-D matrix.</Purpose>
<Library>Functions &amp; Tables</Library>
<Desc>
<image>DirectLookupTable.bmp</image>
<para>The Direct Look-Up Table (n-D) block uses its block inputs as zero-based indices into an n-D table. The number of inputs varies with the shape of the output desired. The output can be a scalar, a vector, or a 2-D matrix. The look-up table uses zero-based indexing, so integer data types can fully address their range. For example, a table dimension using the uint8 data type can address all 256 elements.</para>
<para>You define a set of output values as the <bold>Table data </bold>parameter. You specify what the output shape is: a scalar, a vector or a 2-D matrix. The first input specifies the zero-based index to the first dimension higher than the number of dimensions in the output, the second input specifies the index to the next table dimension, and so on, as shown by this figure:</para>
</Desc>
<DataTypeSupport>
<para>The Direct Look-Up Table (n-D) block accepts mixed-type signals of type double, single, int8, uint8, int16, uint16, int32 and, uint32. The output type can differ from the input type and can be any of the types listed for input; the output type is inherited from the data type of the Table data
parameter. In the case that the table <bold>comes </bold>into the block on an input port, the output port type is inherited from the table input port. Inputs for indexing must be real; table data can be complex.</para>
</DataTypeSupport>
<BDB>Text<image>String</image><Parameter>
<Name>Number of table dimensions</Name>
<para>The number of dimensions that the Table data parameter must have. This
determines the number of independent variables for the table and hence the
number of inputs to the block The number of dimensions that the Table data
parameter must have. This determines the number of independent variables
for the table and hence the number of inputs to the block (see descriptions for
&“Explicit Number of dimensions&” and &“Use one (vector) input port instead of N
ports,&” below).</para>
</Parameter><Parameter>
<Name>String</Name>
<para>Text<bold>Text</bold><bold>Text</bold><bold>Text</bold><bold>Text</bold><bold>Text</bold></para>
</Parameter></BDB>
<Characteristics>Text<SampleTime>Continuous or discrete</SampleTime></Characteristics>
</SimulinkBlock>


Also ich miss diese XML-Blockdateien alphabetisch sortiert in der XML-Datei (mit Titelseite, Inhaltverzeichnis usw) einfügen, damit ich in Endeffekt nur eine XML-File habe, aus der dann eine PDF mit Titelseite, Inhaltverzeichnis, Inhalte usw. entstehen kann.
Ich hab begonnen mir die Module XML::Parser, XML:: Writer. XML::Tree Builder usw anzuschauen, aber eine Hilfe wäre trotzdem supernett, da ich ganz neu in Perl bin.
Danke im voraus!

Gruss: Steffi\n\n

<!--EDIT|renee|1082455359-->
renee
 2004-04-20 14:08
#81600 #81600
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Müssen die Inhalte der alphabetisch sortierten Dateien in ein XML-File, oder muss der Inhalt alphabetisch sortiert werden??

Jedenfalls solltest Du dann die Dateiinhalte einlesen, die XML-Header Sachen rausschmeisen, so dass Du dann nur noch den Inhalt hast...
Die fügst Du dann in der "Gesamt"-PDF an...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pfuschi
 2004-04-20 14:57
#81601 #81601
User since
2004-03-31
198 Artikel
BenutzerIn
[default_avatar]
Servus,
wenn du nur die Dateien in der richtigen Reihenfolge haben musst, ist es vielleicht einfacher wenn du das include System von XML benutzt, da gibt es 2 verschiedene Möglichkeiten weiss grad aber leider nicht wie die heißen, hatte da nen Artikel gelesen, glaub in der iX wars, hm... ja das müsste in der vorletzten iX gewesen sein.

Auf jeden Fall machst du dann eine XML Datei in der nur die include Anweisungen stehen somit hast du dann alles in einer Datei, sofern die Anweisungen vom weiterverarbeitenden Prozessor verstanden werden.

greetz & fetten Segen
manu
PCE - Editor für Perl in Perl
Bookzilla.de - Mit jedem Kauf OpenSource unterstützen
"I know I can't hold the hate inside my mind
cause what consumes your thoughts controls your life"
- Creed
[E|B]
 2004-04-20 21:45
#81602 #81602
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
HiHo!
Ich empfehle für Aufgaben mit XML stets XML::Simple, da es einfach in der Handhabung ist und man schnell und effizient dabei arbeiten kann.
Du liest einfach die gewünschten XML Files mit XML::Simple ein, strickst sie zu einem großen XML File zusammen, das du dann mit PDF::Create in eine PDF Datei schreibst.
Die entsprechenden Manuals findest du auf dem CPAN:

PDF::Create
XML::Simple
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Steffi
 2004-04-21 13:39
#81603 #81603
User since
2004-04-20
3 Artikel
BenutzerIn
[default_avatar]
Hi Erik,
danke für dein Tipp, aber die Reihenfolge der Elemente in der EndXML ist wichtig, deswegen kann man in diesem Fall nicht mit XML::Simple arbeiten.

Gruss,
Steffi
Steffi
 2004-04-21 13:42
#81604 #81604
User since
2004-04-20
3 Artikel
BenutzerIn
[default_avatar]
Hi, renee,

danke für dein Schreiben, aber es ist scho klar dass ich die Dateiinhalte einlesen, die XML-Header Sachen rausschmeisen muss, aber die Frage ist welche Modul ist dabei am besten geeignet...

Gruss,
Steffi
pfuschi
 2004-04-22 00:34
#81605 #81605
User since
2004-03-31
198 Artikel
BenutzerIn
[default_avatar]
Servus,
sofern es hier überhaupt jemanden interessiert, ich hab den Artikel grad vor mir.
iX 4/04 Seite 123
"Verteilte Dokumente mit externen Entitäten"
In einem Leserbrief in der iX 5/04 wird auch
XLink&XInclude vorgeschlagen
Hier ein Xinlcude Beispiel von http://www.zvon.org/xxl/XIncludeTutorial/Output/example2.html
Code: (dl )
1
2
3
4
    <a> 
    <xi:include href="b.xml"
     xmlns:xi="http://www.w3.org/2001/XInclude"/>
   </a>

Falls eine solche Lösung für dich in Frage kommt google einfach mal nach den Stichworten Xlink, Xinclude oder XMl Catalogs.

Also sofern nur die Dateien richtig sortiert sein müssen wäre das wohl eine recht simple Lösung.
Du sortierst die Dateien nach deinen Kriterien und gibst einfach die nötigen XML Anweisung für eine der 3 genannten XML Technologien in der gewünschten Reihenfolge in deine XMl Datei aus. Fertig!

[EDIT]
Das mit dem XML Headern hab ich allerdings in Bezug auf die genannten Techniken noch nciht berücksichtigt.
Insofern ist evtl. eine XML::Simple Lösung "the most perlish way"
Für diesen Fall gilt etwas in der Richtung
Code (perl): (dl )
1
2
#gXCFFWR <=> getXMLContentFromFileWithoutRoot
$xml .= gXCFFWR($_) foreach @sorted_files;

wobei der sub gXCFFWR dann das XML handling z.b. via XML::Simple macht oder einfach mit ein bischen regex das XML-Gerüst drumherum entfernt.


greetz & fetten Segen
manu\n\n

<!--EDIT|pfuschi|1082580196-->
PCE - Editor für Perl in Perl
Bookzilla.de - Mit jedem Kauf OpenSource unterstützen
"I know I can't hold the hate inside my mind
cause what consumes your thoughts controls your life"
- Creed
<< >> 9 Einträge, 1 Seite



View all threads created 2004-04-15 17:32.