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 Sub
Ich 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.getChildNodes
Code: 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