[PHP] Mergen van meerdere XML (RDF) documenten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • NoControl
  • Registratie: Februari 2003
  • Laatst online: 09-06 00:38
De situatie is dat ik een array van XML strings heb die allemaal aan dezelfde structuur voldoen. Ik zou deze willen mergen naar één XML string/DOM/file (eender welk is goed).

Simpel voorbeeldje:
XML:
1
2
3
4
5
<root>
  <elem>
    <a>1</a>
  </elem>
</root>


+

XML:
1
2
3
4
5
6
<root>
  <elem>
    <b>2</b>
  </elem>
  <elem2/>
</root>


zou moeten worden

XML:
1
2
3
4
5
6
7
<root>
  <elem>
    <a>1</a>
    <b>2</b>
  </elem>
  <elem2/>
</root>


Ik denk dat ik dit wel zou kunnen programmeren door de DOM-tree van beide documenten gelijk af te gaan en zo een nieuwe DOM-tree aanmaken, maar dit lijkt me een veelvoorkomend probleem (hoewel Google en GoT search niets helemaal hetzelfde opleverden...) dat een simpeler oplossing moet hebben. Moest het iets uitmaken, de XML documenten zijn CC/PP profiles (welke RDF gebruiken). Heb ik een DOM of PHP XML functie over het hoofd gezien? Andere oplossingen of ideeën?

Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 18-09 15:14

ATS

Ik ben bang dat dit helemaal niet zo voor de hand ligt als je denkt. Immers:
XML:
1
2
3
4
5
6
7
8
9
<root>
  <elem>
    <a>1</a>
  </elem>
  <elem>
    <b>2</b>
  </elem>
  <elem2/>
</root>

...zou net zo'n geldige merge kunnen zijn. Ik ben bang dat je beide bestanden in hun eigen DOM tree zal moeten parsen, en dan één van de twee moeten aflopen en in de andere mergen op de manier die je jij nodig hebt.

[ Voor 4% gewijzigd door ATS op 02-08-2007 17:46 ]

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • foliant
  • Registratie: Juli 2007
  • Laatst online: 19-01-2022
xslt misschien?
(php.net/xslt)

bestanden.xml:

<lijst>
<file>file1.xml</file>
<file>file2.xml</file>
<!-- <file>file3.xml</file>
<file>file4.xml</file> -->
</lijst>


xslt sheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/">
<root>
<elem>
<xsl:for-each select="document('bestanden.xml')/lijst/file/text()">
<xsl:variable name="current_file_root" select="document(string(.))"/>
<xsl:copy-of select="$current_file_root/root/elem/*"/>
</xsl:for-each>
</elem>
<xsl:for-each select="document('bestanden.xml')/lijst/file/text()">
<xsl:variable name="current_file_root" select="document(string(.))"/>
<xsl:copy-of select="$current_file_root/root/elem2"/>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>