Domino 9 und frühere Versionen > ND6: Entwicklung
RichText in RichText EINFÜGEN
flaite:
hab ich eben über google gefunden.
Rocky Oliver ist mein 2.-Lieblings-Loti. Hinter Bob Balaban.
http://www.lotusgeek.com/SapphireOak/LotusGeekBlog.nsf/d6plinks/ROLR-6CPL56
flaite:
Hilft dieser Stan Rogers code weiter:
Oder vielleicht wendest du dich einfach an ihn. Normal gibt der sich ja sehr hilfsbereit (ich glaub 60% der Antworten zu Programmierfragen in Notes-Foren sind von ihm). Ansonsten kann ich auch weitermachen. Hab aber z.Zt. ziemlich viel anderen Kram.
--- Code: ---Function CrossDocClone(SourceNode As NotesDOMNode, TargetParentNode As NotesDOMNode) As NotesDOMNode
Dim NewNode As NotesDOMNode
Dim NewChildNode As NotesDOMNode
Dim NextNode As NotesDOMNode
<error handling statement goes here -- there may be failures>
%REM
This assumes the following objects are Global
SourceRootDoc -- the NotesDOMDocumentNode that clones are drawn from
TargetRootDoc -- the NotesDOMDocumentNode that clones are inserted into
%END REM
Select Case SourceNode.NodeType
'ignoring attribute, comment, document and entity types
Case DOMNODETYPE_ELEMENT_NODE
Set NewNode = TargetRootDoc.CreateElementNode(SourceNode.NodeName)
Case DOMNODETYPE_TEXT_NODE
Set NewNode = TargetRootDoc.CreateTextNode(SourceNode.NodeValue)
Case DOMNODETYPE_CDATASECTION_NODE
Set NewNode = TargetRootDoc.CreateCDATASectionNode(SourceNode.NodeValue)
End Select
If SourceNode.HasAttributes Then
Dim map As NotesDOMNamedNodeMap
Dim attrib As NotesDOMAttributeNode
Dim count As Integer
Set map = SourceNode.Attributes
For count = 1 To map.NumberOfElements
Set attrib = map.GetItem(count)
Call NewNode.SetAttribute(attrib.NodeName, attrib.NodeValue)
Next
End If
Call TargetParentNode.AppendChild(NewNode)
If SourceNode.HasChildNodes Then
Set NextNode = SourceNode.FirstChild
Set NewChildNode = CrossDocClone(NextNode, NewNode)
Set NextNode = NextNode.NextSibling
While Not NextNode.IsNull
Set NewChildNode = CrossDocClone(NextNode, NewNode)
Wend
End If
End Function
--- Ende Code ---
flaite:
Ein Weg, um eine Node zu erzeugen (und in eine vorhandene DOM-Repräsentation eines xml-Dokuments einzuhängen) sieht wie folgt aus:
1. DomDocumentNode-Objekt erzeugen:
--- Code: ---Dim docNode As NotesDOMDocumentNode
[...]
Set docNode = domParser.Document
--- Ende Code ---
2. Mit docNode (!) eine DomElement erzeugen.
--- Code: ---Dim newNode as notesDOMElementNode
[...]
Set newNode = docNode.CreateElementNode("NewElement")
--- Ende Code ---
docNode repräsentiert das im Parser aktive (spelling?) xml-Document
Dies erzeugt ein <newElement></newElement> (Attribute, childNodes als Text oder als weitere nodes können da sicher angefügt werden).
3. newNode an eine existierende node anhängen:
--- Code: ---Call nodeChildRichText.AppendChild(newNode)
--- Ende Code ---
Der entsprechende code in meinem Beispielcode sieht so aus:
--- Code: ---
If nodeChildRichText.NodeName = "pardef" Then
Stop
Set newNode = docNode.CreateElementNode("NewElement")
Call nodeChildRichText.AppendChild(newNode)
End If
--- Ende Code ---
Aber wie hängt man jetzt eine Node aus einem anderen xml Dokument ein?
Man kann alle Bestandteile dieser Node auslesen (nodeName, enthaltener Text, enthaltene Nodes, Attribute-Nodes) und daraus eine neue Node erzeugen. Aber vielleicht gibts einen besseren Weg.
Aus
--- Code: ---<item name='RTTWO'><richtext>
<pardef id='2'/>
<par def='2'/></richtext></item>
--- Ende Code ---
wird wohl:
--- Code: ---<item name='RTTWO'><richtext>
<pardef id='2'>
<newElement/>
</pardef>
<par def='2'/></richtext></item>
--- Ende Code ---
Nicht was du wolltest, aber vielleicht ein Starter.
Ich hab auch Probleme das manipulierte xml in eine Datei herauszuschreiben. Kann mir da jemand helfen?
Axel
eknori (retired):
--- Zitat ---Ich hab auch Probleme das manipulierte xml in eine Datei herauszuschreiben. Kann mir da jemand helfen?
--- Ende Zitat ---
Ich mache das vielleicht ein wenig umständlich, aber so bekomme ich das hin.
ich DXL - exporte das doc in ein RTITEM, mache dort die Manipulationen. Anschließend DXL - importe ich die Änderungen wieder in das doc und streame dann einen DXLExport in eine Datei. ::) :P
Den Code von Rocky habe ich auch schon gesehen, aber noch nicht richtig verstanden.
flaite:
Jedenfalls kannst du mit meinem code mal versuchen, dort irgendwo eine neue node einzuhängen?
Oder kannst du mir deinen code schicken, damit ich das damit mal versuchen kann. Wenn es eine kleine Test.nsf ist, geht es ja.
appendChild funktioniert jedenfalls. Und da gibts noch replaceChild.
Gruß Axel
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln