in:
viewtopic.php?f=18&t=66795
wurde mir gezeigt wie ich mittels com.sun.star.xml.dom.DocumentBuilder auf ein xml-dokument zugreifen kann:
Code: Alles auswählen
Sub Main
 sURI = "file:///home/axel/content.xml"
 oDocumentBuilder = createUnoService("com.sun.star.xml.dom.DocumentBuilder")
 oDOMDocument = oDocumentBuilder.parseURI(sURI)
 oBody = oDOMDocument.getElementsByTagNameNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0", "body").item(0)
 oText = oBody.getElementsByTagNameNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0", "text").item(0)
 oTextChilds = oText.getChildNodes()
  
 for i = 0 to oTextChilds.getLength()
  oTextChild = oTextChilds.item(i)
  if oTextChild.getPrefix()="draw" and oTextChild.getLocalName()="frame" then
   xray oTextChild
  end if
  if oTextChild.getPrefix()="text" and oTextChild.getLocalName()="p" then exit for
 next
End SubIch habe mich nun durch den Code gearbeitet und auch begriffen wie ich an der Stelle:
Code: Alles auswählen
if oTextChild.getPrefix()="draw" and oTextChild.getLocalName()="frame" then
   '...
end if
Code: Alles auswählen
oTextChild.getChildNodesCode: Alles auswählen
oTextChild.getChildNodes.item(<Index>)
Code: Alles auswählen
oTextChild.getChildNodes.item(0)
Code: Alles auswählen
Msgbox oTextChild.getChildNodes.item(0).dbg_properties
ABER:
Wie bekomme ich einen kompletten Node als quasi XML-Quelltext in eine Variable?
z.B. entspricht bei einer konkreten XML-Testdatei, der erste gefundene Node aufgrund des Codes:
Code: Alles auswählen
if oTextChild.getPrefix()="draw" and oTextChild.getLocalName()="frame" then
   '...
end if
Code: Alles auswählen
<draw:frame draw:name="Rahmen1" draw:z-index="0" svg:height="3.006cm" svg:width="4.838cm" svg:y="5.519cm" svg:x="7.86cm" text:anchor-page-number="1" text:anchor-type="page" draw:style-name="fr1">
<draw:text-box>
<text:p text:style-name="Frame_20_contents">
<text:database-display text:database-name="Neue Datenbank3" text:column-name="Anrede" text:table-type="table" text:table-name="Tabelle1"><Anrede></text:database-display>
</text:p>
<text:p text:style-name="Frame_20_contents">
<text:database-display text:database-name="Neue Datenbank3" text:column-name="Vorname" text:table-type="table" text:table-name="Tabelle1"><Vorname></text:database-display>
<text:database-display text:database-name="Neue Datenbank3" text:column-name="Name" text:table-type="table" text:table-name="Tabelle1"><Name></text:database-display>
</text:p>
<text:p text:style-name="Frame_20_contents">
<text:database-display text:database-name="Neue Datenbank3" text:column-name="Strasse" text:table-type="table" text:table-name="Tabelle1"><Strasse></text:database-display>
</text:p>
<text:p text:style-name="Frame_20_contents">
<text:database-display text:database-name="Neue Datenbank3" text:column-name="PLZ" text:table-type="table" text:table-name="Tabelle1"><PLZ></text:database-display>
<text:database-display text:database-name="Neue Datenbank3" text:column-name="Ort" text:table-type="table" text:table-name="Tabelle1"><Ort></text:database-display>
</text:p>
</draw:text-box>
</draw:frame>
Geht das direkt?
Oder muss ich bei einem solchen, bereits im Code 'isolierten' Node, durch alle Child-Nodes (aller weiteren Ebenen) interieren dann auch alle Attribute auslesen um am Ende quasi umgekehrt alles wieder zusammenzusetzen um den gewünschten String zu erhalten?
Gruß
Stephan