Autor Thema: DXL originalgetreu importieren  (Gelesen 9773 mal)

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
DXL originalgetreu importieren
« am: 08.04.09 - 17:13:17 »
Hallo Leute,

ich habe ein dxl-File, das in eine Datenbank importiert werden soll. Das tut auch.
Jetzt ist aufgefallen, dass das Feld "$UpdatedBy" aktualisiert wurde. Da steht die Person drin, die das Dokument importiert hat. Im dxl-File selbst stehen aber andere Personen drin.

Wie kann diese Information beibehalten werden? Gibt es da was?
Gruß
Johnson

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: DXL originalgetreu importieren
« Antwort #1 am: 08.04.09 - 17:19:30 »
$UpdatedBy kannst Du nicht manipulieren. Da beim einem DXL-Import ein komplett neues Dokument erzeugt wird, geht Dir $UpdatedBy und $Revisions komplett verloren.

Bernhard

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: DXL originalgetreu importieren
« Antwort #2 am: 08.04.09 - 17:22:31 »
Mist!  :-X

Ok. Dann muss ich nach einer anderen Lösung suchen und die vorschlagen. Das wird dann wohl eher ein riesen Aufwand...

Trotzdem danke, Bernhard
Gruß
Johnson

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: DXL originalgetreu importieren
« Antwort #3 am: 08.04.09 - 17:31:28 »
Binär exportieren (setForceNoteFormat="true" im Exporter). Dann soll es gehen (hab ich pers. aber nocht nicht ausprobiert).

HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: DXL originalgetreu importieren
« Antwort #4 am: 08.04.09 - 17:41:18 »
Ok. Ich werd's mal probieren.

Es handelt sich aber bei den dxl-Files um die configall_xxx und serverdoc_xxx Dateien aus dem IBM_TECHNICAL_SUPPORT-Verzeichnis. Die sammel ich ein und importiere sie in einen Datenbank.
Gruß
Johnson

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: DXL originalgetreu importieren
« Antwort #5 am: 08.04.09 - 18:02:15 »
Was mir übrigens dabei auch durch den Kopf geschossen ist: Ich könnte die dxl-Files auch direkt im Browser öffnen. Die sind dann jedoch nicht besonders gut lesbar. Hat jemand ein xslt-File, mit dem die Darstellung übersichtlicher wird, bzw. wie erstellt man selbst so ein xslt-File? Hab da leider von Tut und Blasen keine Ahnung.  :-\
Gruß
Johnson

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: DXL originalgetreu importieren
« Antwort #6 am: 09.04.09 - 09:43:09 »
Kannst du mal so ein Beispiel-XML-File posten.
... und Aussagen dadrüber, wie das Endergebnis ungefähr aussehen soll.

Da ich xml/xpath Wochen habe und falls ein schmerzender Zahn sich nicht verschlimmert, finde ich möglicherweise Zeit, mich darum zu kümmern.
Mit Suchworten DXL XsltTransformer, dxl xslt findest du schon ein paar Treffer in google.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: DXL originalgetreu importieren
« Antwort #7 am: 09.04.09 - 10:23:59 »
Sorry. Das File ist so groß. Das zu anonymisieren, dauert ne ganze Weile.

Ich habe mir noch einen Agenten im Domino Directory geschrieben, der Dokumente aus dem Domino Directory exportiert.

Code
Option Public
Option Declare


' ### constants ###

Private Const BIF_DONTGOBELOWDOMAIN = &H2
Private Const BIF_RETURNONLYFSDIRS = &H1
Private Const DLG_FOLDER_TITLE = "Wählen Sie eine Ordner"
Private Const MAX_PATH = 260


' ### user defined types ###

' BrowseInfo
Private Type BrowseInfo
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type


' ### external functions ###


Declare Private Function apiGetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Long    ' Retrieves the active window.
Declare Private Function apiSHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long    ' This function displays a dialog box that allows a user to select a folder.
Declare Private Function apiSHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (Byval pidl As Long, Byval pszPath As String) As Long    ' This function converts an item identifier list to a file system path.

Sub Initialize
    
    Dim db As NotesDatabase
    Dim dc As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim lng_counter As Long
    Dim nde As NotesDXLExporter
    Dim ns As NotesStream
    Dim s As NotesSession
    Dim str_filepath As String
    Dim str_path As String
    Dim uiws As NotesUIWorkspace
    
    
' ### initialize ###
    
    Set s = New NotesSession
    Set db = s.CurrentDatabase
    
    
' ### get the current or all selected documents ###
    
    Set dc = db.UnprocessedDocuments
    If dc.Count = 0 Then
        Print "No document selected!"
        Goto terminate
    End If
    
    
' ### choose the target directory ###
    
    str_path = DlgFolder
    If str_path = "" Then Goto terminate
    
    
' ### create dxl exporter ###
    
    Set nde = s.CreateDXLExporter
    
    
' ### run through all documents ###
    
    Set doc = dc.GetFirstDocument
    Do Until doc Is Nothing
        
        ' build the target filename
        str_filepath = str_path & "\" & doc.NoteID & ".dxl"
        
        ' open or create target file
        Set ns = s.CreateStream
        If ns.Open(str_filepath) = False Then
            Print "Could not open or create file " & str_filepath
            Goto nextdoc
        End If
        Call ns.Truncate
        
        ' set input and output for dxl exporter
        Call nde.SetInput(doc)
        Call nde.SetOutput(ns)
        
        ' export dxl
        Call nde.Process
        
        ' close target file
        Call ns.Close
        
nextdoc:
        lng_counter = lng_counter + 1
        Print lng_counter & " of " & dc.Count & " document(s) exported"
        Set doc = dc.GetNextDocument(doc)
    Loop
    
    
' ### terminate ###
    
terminate:
    Set doc = Nothing
    Set dc = Nothing
    Set db = Nothing
    Set s = Nothing
    
End Sub

Function DlgFolder As String
    
' Opens a Treeview control that displays the directories in a computer
    
    Dim lng_lpidl As Long
    Dim str_buffer As String
    Dim bi As BrowseInfo
    
    
' ### dialog ###
    
' set dialog properties
    bi.hOwner = apiGetActiveWindow
    bi.lpszTitle = DLG_FOLDER_TITLE
    bi.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
    
' show dialog
    lng_lpidl = apiSHBrowseForFolder(bi)
    
' translate id list
    If (lng_lpidl) Then
        str_buffer = Space(MAX_PATH)
        Call apiSHGetPathFromIDList(lng_lpidl, str_buffer)
        str_buffer = Left(str_buffer, Instr(str_buffer, Chr(0)) - 1)
        DlgFolder = str_buffer
    End If
    
    
' ### terminate ###
    
terminate:
    
End Function


Der Agent sollte auf ausgewählte Dokumente laufen.

Der einzigste Unterschied gegen über den Files im IBM_TECHINCAL_SUPPORT-Verzeichnis ist:

Agent:
Zitat
<!DOCTYPE document SYSTEM 'xmlschemas/domino_7_0_2.dtd'>
<document xmlns='http://www.lotus.com/dxl' version='7.0' maintenanceversion='2.0'
 replicaid='C1256AEE00321D4B' form='Server'>

IBM_TECHINCAL_SUPPORT:
Zitat
<!DOCTYPE note SYSTEM 'domino_6_5_5.dtd'>
<note class='document' xmlns='http://www.lotus.com/dxl' version='6.5' maintenanceversion='5.0' replicaid='C12570B3004DFDF2'>

Gruß
Johnson

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: DXL originalgetreu importieren
« Antwort #9 am: 09.04.09 - 14:21:45 »
Hi,

soll ich jetzt irgendwas machen?
Also aus Dokumenten aus dem Names.nsf etwas darstellbares machen?

Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: DXL originalgetreu importieren
« Antwort #10 am: 09.04.09 - 14:42:54 »
Du wärest ein Gott.
Ich steige bei XSL irgendwie nicht durch.
Gruß
Johnson

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: DXL originalgetreu importieren
« Antwort #11 am: 09.04.09 - 14:53:44 »
Ich habe jetzt mal ein Testserverdocument exportiert (s. Anhang)
Gruß
Johnson

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: DXL originalgetreu importieren
« Antwort #12 am: 09.04.09 - 17:06:20 »
Ich mach zur Zeit einfach ziemlich viel XPath für Domino Webservices und ein bischen research für einen .NET Kollegen.
Da kann ich das mitnehmen.


Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: DXL originalgetreu importieren
« Antwort #13 am: 12.04.09 - 02:19:14 »
Du wärest ein Gott.

Mit Religion hat das nix zu tun. Es ist nur ein bischen Arbeit. Trainier halt manchmal ein wenig. Kann das auch öffentlich tun. Angesichts meiner Tagessätze rechnet sich das sowieso.

OK.
Das ist jetzt eine Art proof of concept. Es kann einiges verbessert werden.

Der Agent holt sich zur Zeit eine Datei C:/dxl/hello.xml
Eigentlich müßte er über ein Verzeichnis iterieren und die einzelnen dxl-Dateien da rausholen.
Nicht so schwierig, das zu programmieren.

Der Agent holt sich zur Zeit eine Datei C:/dxl/hello.xsl
Besser wäre es, wenn das xsl in einem Konfig-Dokument gespeichert wäre. Auch das sollte nicht so schwierig zu programmieren sein.

Der Agent schreibt eine Datei C:/dxl/hello.html

Sowohl beim generierten html (ist im .xsl) als auch im Aufbau der xsl selbst, kann noch eine Menge verbessert werden.

Die Errormeldungen des aus der Hilfe kopierten Agenten sind nicht so das Gelbe. Da müßte noch geguckt werden, inwieweit da insbesondere xsl-Fehler besser ausgegeben werden können. Das warn bischen nervig. Hab kein Tool benutzt (hätte Sinn gemacht) sondern rein Notes.

Ich denke die Streams sollten besser mit einem close geschlossen werden.

Der Agent:

Options:
Code
Option Public
Option Declare
%INCLUDE "lsxbeerr.lss"

Initialize:
Code
Sub Initialize
	On Error lsERR_NOTES_XSLT_INPUT_OBJECT Goto err_IN
	On Error lsERR_NOTES_XSLT_OUTPUT_OBJECT Goto err_OUT
	On Error lsERR_NOTES_XSLT_STYLESHEET_OBJECT Goto err_SS
	
	Dim session As New NotesSession
	Dim filename As String
	Dim pathname As String
	
	filename$ = "hello"
	pathname$ = "c:\dxl\"
	
	Dim XML_in As NotesStream    ' input file
	Set XML_in=session.CreateStream
	If Not XML_in.Open(pathname$ & filename$ & ".xml") Then
		Messagebox "Cannot open " & filename$,, "XML file error"
		Exit Sub
	End If
	If XML_in.Bytes = 0 Then
		Messagebox filename$ & " does not exist or is empty",, "XML file error"
		Exit Sub
	End If
	
	Dim XSL_ss As NotesStream    ' style sheet
	Set XSL_ss=session.CreateStream
	If Not XSL_ss.Open(pathname$ & filename$ & ".xsl") Then
		Messagebox "Cannot open " & filename$,, "XSL file error"
		Exit Sub
	End If
	
	Dim XML_out As NotesStream    ' output file
	Set XML_out=session.CreateStream
	If Not XML_out.Open(pathname$ & filename$ & ".html") Then
		Messagebox "Cannot create " & filename$,, "HTML file error"
		Exit Sub
	End If
	XML_out.Truncate
	
	Dim transformer As NotesXSLTransformer
	Set transformer=session.CreateXSLTransformer(XML_in, XSL_ss, XML_out)
	transformer.Process
	Exit Sub
err_IN:
	Messagebox "XSL Input error", , "XSLTransformer Process"
	Exit Sub
err_OUT:
	Messagebox "XSL Output error", , "XSLTransformer Process"
	Exit Sub
err_SS:
	Messagebox "Style Sheet error", , "XSLTransformer Process"
	Exit Sub
End Sub

xsl [OBSOLET, bessere Version s.u.)]
Code
<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:d="http://www.lotus.com/dxl">

<xsl:output method="html"/>

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE></TITLE>

</HEAD>

<BODY>
<table>
<xsl:apply-templates/>
</table>
</BODY>
</HTML>

</xsl:template>


<xsl:template match="/d:document">
	
	
	<xsl:for-each select="@*">
		<tr>
			<td> 
				document metadata
			</td>
			<td>
				<xsl:value-of select="name()"/>
			</td>
			
			<td>
				<xsl:value-of select="."/>
			</td>
			
			
		</tr>	
	</xsl:for-each>
	
	
	
	<xsl:apply-templates/>
</xsl:template>

<xsl:template match="/d:document">
	
	
	<xsl:for-each select="@*">
		<tr>
			<td> 
				document metadata
			</td>
			<td>
				<xsl:value-of select="name()"/>
			</td>
			
			<td>
				<xsl:value-of select="."/>
			</td>
			
			
		</tr>	
	</xsl:for-each>
	
	
	
	<xsl:apply-templates/>
</xsl:template>


<xsl:template match="/d:document/d:noteinfo">
	<xsl:for-each select="@*">
			<tr>
				<td> 
					noteinfo metadata
				</td>
				<td>
					<xsl:value-of select="name()"/>
				</td>
				
				<td>
					<xsl:value-of select="."/>
				</td>
				
				
			</tr>	
		</xsl:for-each>
	
	<xsl:apply-templates/>
	
</xsl:template>

<xsl:template match="/d:document/d:noteinfo/d:created/d:datetime">
	<xsl:for-each select="@*">
	<tr>
		<td> 
			noteinfo created metadata
		</td>
		<td>
			<xsl:value-of select="name()"/>
		</td>
				
		<td>
			<xsl:value-of select="."/>
		</td>
				
				
	</tr>	
	</xsl:for-each>
	
	<tr>
		<td> 
			noteinfo created metadata value
		</td>
		<td>
			<xsl:value-of select="text()"/>
		</td>
	</tr>
	
</xsl:template>


<xsl:template match="/d:document/d:noteinfo/d:modified/d:datetime">
	<xsl:for-each select="@*">
	<tr>
		<td> 
			noteinfo modified metadata
		</td>
		<td>
			<xsl:value-of select="name()"/>
		</td>
				
		<td>
			<xsl:value-of select="."/>
		</td>
				
				
	</tr>	
	</xsl:for-each>
	
	<tr>
		<td> 
			noteinfo modified metadata value
		</td>
		<td>
			<xsl:value-of select="text()"/>
		</td>
	</tr>
	
</xsl:template>

<xsl:template match="/d:document/d:noteinfo/d:revised/d:datetime">
	<xsl:for-each select="@*">
	<tr>
		<td> 
			noteinfo revised metadata
		</td>
		<td>
			<xsl:value-of select="name()"/>
		</td>
				
		<td>
			<xsl:value-of select="."/>
		</td>
				
				
	</tr>	
	</xsl:for-each>
	
	<tr>
		<td> 
			noteinfo revised metadata value
		</td>
		<td>
			<xsl:value-of select="text()"/>
		</td>
	</tr>
	
</xsl:template>

<xsl:template match="/d:document/d:noteinfo/d:lastaccessed/d:datetime">
	<xsl:for-each select="@*">
	<tr>
		<td> 
			noteinfo lastaccessed metadata
		</td>
		<td>
			<xsl:value-of select="name()"/>
		</td>
				
		<td>
			<xsl:value-of select="."/>
		</td>
				
				
	</tr>	
	</xsl:for-each>
	
	<tr>
		<td> 
			noteinfo lastaccessed metadata value
		</td>
		<td>
			<xsl:value-of select="text()"/>
		</td>
	</tr>
	
</xsl:template>


<xsl:template match="/d:document/d:noteinfo/d:addedtofile/d:datetime">
	<xsl:for-each select="@*">
	<tr>
		<td> 
			noteinfo addedtofile metadata
		</td>
		<td>
			<xsl:value-of select="name()"/>
		</td>
				
		<td>
			<xsl:value-of select="."/>
		</td>
				
				
	</tr>	
	</xsl:for-each>
	
	<tr>
		<td> 
			noteinfo addedtofile metadata value
		</td>
		<td>
			<xsl:value-of select="text()"/>
		</td>
	</tr>
	
</xsl:template>

<xsl:template match="/d:document/d:updatedby/d:name">
	<xsl:for-each select="@*">
	<tr>
		<td> 
			updatedby metadata
		</td>
		<td>
			<xsl:value-of select="name()"/>
		</td>
				
		<td>
			<xsl:value-of select="."/>
		</td>
				
				
	</tr>	
	</xsl:for-each>
	
	<tr>
		<td> 
			updatedby metadata value
		</td>
		<td>
			<xsl:value-of select="text()"/>
		</td>
	</tr>
	
</xsl:template>




<xsl:template match="d:document/d:item">
  <tr>
  	<td class="key">
  		<xsl:value-of select="@name"/>
  	</td>
  	<xsl:apply-templates/>
  </tr>
  
</xsl:template>

<xsl:template match="/d:document/d:item/d:text">
	<td class="value">
		<xsl:value-of select="text()"/>
	</td>
</xsl:template>

<xsl:template match="/d:document/d:item/d:text">
	<td class="text-value">
		<xsl:value-of select="text()"/>
	</td>
</xsl:template>


<xsl:template match="/d:document/d:item/d:textlist/d:text">
	<td class="multi-text-value">
		<xsl:value-of select="text()"/>
	</td>
</xsl:template>

<xsl:template match="/d:document/d:item/d:number">
	<td class="number-value">
		<xsl:value-of select="text()"/>
	</td>
</xsl:template>

<xsl:template match="/d:document/d:item/d:datetime">
	<td class="text-value">
		<xsl:value-of select="text()"/>
	</td>
</xsl:template>


<xsl:template match="/d:document/d:item/d:datetimelist/d:datetimepair/d:datetime">
	<td class="date-time-list">
		<xsl:value-of select="text()"/>
	</td>
</xsl:template>


<xsl:template match="/d:document/d:item/d:rawitemdata">
	<td class="raw-item-value">
		type:<xsl:value-of select="@type"/>
	</td>
	<td class="raw-item-value">
		<xsl:value-of select="text()"/>
	</td>
</xsl:template>




<!--

<document xmlns='http://www.lotus.com/dxl' version='7.0' maintenanceversion='2.0'
 replicaid='C1257566003E4722' form='Server'>
<noteinfo noteid='1476' unid='E2B84EF46C02A370C12575930045E264' sequence='1'>
<created><datetime dst='true'>20090409T144319,40+02</datetime></created>
<modified><datetime dst='true'>20090409T144702,93+02</datetime></modified>
<revised><datetime dst='true'>20090409T144702,92+02</datetime></revised>
<lastaccessed><datetime dst='true'>20090409T144702,93+02</datetime></lastaccessed>
<addedtofile><datetime dst='true'>20090409T144702,93+02</datetime></addedtofile></noteinfo>
<updatedby><name>CN=Test User/O=Test</name></updatedby>
-->

</xsl:stylesheet>
« Letzte Änderung: 17.04.09 - 11:08:08 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
richtung eines besseren xslts
« Antwort #14 am: 17.04.09 - 10:27:57 »
Code
<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:d="http://www.lotus.com/dxl">

<xsl:output method="xml" indent="yes" encoding="utf-8"/>
<xsl:output doctype-public="-//W3C/DTD XHTML 1.0 Strict//EN"/>
<xsl:output doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

<xsl:template match="/">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title></title>

</head>

<body>
<table border="1"><xsl:apply-templates mode="meta"/></table>
<br/><br/>
<table border="1">
<xsl:apply-templates mode="item"/>
</table>


</body>
</html>

</xsl:template>

<!-- MODE META  start -->

<xsl:template match="/d:document"  mode="meta">
	
	
	<xsl:for-each select="@*">
		<tr>
			
			<td>
				document <xsl:value-of select="name()"/>
			</td>
			
			<td>
				<xsl:value-of select="."/>
			</td>
			
			
		</tr>	
	</xsl:for-each>
	
	
	
	<xsl:apply-templates mode="meta"/>
</xsl:template>

<xsl:template match="/d:document/d:item"  mode="meta"/>


<xsl:template match="/d:document/d:noteinfo"  mode="meta">
	<xsl:for-each select="@*">
			<tr>
				
				<td>
					noteinfo <xsl:value-of select="name()"/>
				</td>
				
				<td>
					<xsl:value-of select="."/>
				</td>
				
				
			</tr>	
		</xsl:for-each>
	
	<xsl:apply-templates mode="meta"/>
	
</xsl:template>

<xsl:template match="/d:document/d:noteinfo/d:created|d:modified|d:revised|d:lastaccessed|d:addedtofile" mode="meta">
	
	<tr>
		<td> 
			<xsl:value-of select="name()"/>
		</td>
		<td>
			<xsl:value-of select="./d:datetime/text()"/>
		</td>
	</tr>
	
</xsl:template>

<xsl:template match="/d:document/d:updatedby/d:name" mode="meta">
	
	
	<tr>
		<td> 
			updatedby 		
		</td>
		<td>
			<xsl:value-of select="text()"/>
		</td>
	</tr>
	
</xsl:template>

<!-- MODE META  end -->

<!-- MODE ITEM  start -->

<xsl:template match="/d:document/d:noteinfo"  mode="item"/>
<xsl:template match="/d:document/d:updatedby"  mode="item"/>


<xsl:template match="/d:document/d:item" mode="item">
	
  	<xsl:apply-templates mode="item">
  		<xsl:with-param name="name" select="@name"/>
  	</xsl:apply-templates>
</xsl:template>

<xsl:template match="/d:document/d:item/d:text" mode="item">
	<xsl:param name="name"/>
	<xsl:if test="string-length(normalize-space(text())) > 0">
	<tr>
		<td class="key">
			<xsl:value-of select="$name"/>
		</td>
	<td class="value">
		<xsl:value-of select="text()"/>
	</td>
	</tr>
	</xsl:if>
</xsl:template>

<xsl:template match="/d:document/d:item/d:textlist" mode="item">
	<xsl:param name="name"/>
	<tr>
		<td class="key">
			<xsl:value-of select="$name"/>
		</td>
	<td class="value">
		<xsl:apply-templates mode="item"/>
	</td>
	</tr>
</xsl:template>




<xsl:template match="/d:document/d:item/d:textlist/d:text" mode="item">
		<xsl:if test="position() > 1">, </xsl:if><xsl:value-of select="text()"/>
</xsl:template>


<xsl:template match="/d:document/d:item/d:number" mode="item">
	<xsl:param name="name"/>
	<tr>
		<td class="key">
			<xsl:value-of select="$name"/>
		</td>
	<td class="value">
		<xsl:value-of select="text()"/>
	</td>
	</tr>
</xsl:template>

<xsl:template match="/d:document/d:item/d:datetime" mode="item">
	<xsl:param name="name"/>
		<tr>
			<td class="key">
				<xsl:value-of select="$name"/>
			</td>
		<td class="value">
			<xsl:value-of select="text()"/>
		</td>
	</tr>
</xsl:template>

<xsl:template match="/d:document/d:item/d:datetimelist/d:datetimepair" mode="item">
	<xsl:param name="name"/>
	<tr>
		<td class="key">
			<xsl:value-of select="$name"/>
		</td>
	<td class="value">
		<xsl:apply-templates mode="item"/>
	</td>
	</tr>
</xsl:template>

<xsl:template match="/d:document/d:item/d:datetimelist/d:datetimepair/d:datetime" mode="item">
		<xsl:if test="position() > 1"> - </xsl:if><xsl:value-of select="text()"/>
</xsl:template>


<xsl:template match="/d:document/d:item/d:rawitemdata" mode="item">
<xsl:param name="name"/>
		<tr>
			<td class="key">
				<xsl:value-of select="$name"/>
			</td>
		<td class="value">
			<xsl:value-of select="text()"/>
		</td>
	</tr></xsl:template>


<!-- MODE ITEM  end -->

</xsl:stylesheet>
Dieses xslt ist kompakter und zeigt nun keine Felder mehr an, die keine Werte haben.
Die Darstellung ist ein wenig übersichtlicher.

Probleme macht noch der exzessiv generierte whitespace und ein paar andere Dinge.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: DXL originalgetreu importieren
« Antwort #15 am: 20.04.09 - 11:01:26 »
Besten Dank, für die Mühen, Pitiyankee. Finde ich super von dir. Ich hoffe, deinem Zahn gehts besser. Ich muss jetzt noch dein XSL angucken und verstehen, was das genau bedeutet.

Ich habe mich letztes Wochenende auch mal an XSL herangewagt (s. Anhang). Aber so richtig schlau werde ich selbst aus meinem Code noch nicht, da ich mich lediglich durch Beispiele und Tutorials geklickt habe.

Ich habe jedoch noch keine Idee, wie ich die Aliaswerte von manchen Feldern in richtigen lesbaren Text umwandeln kann. Ebenso wäre es gut, wenn das fertige HTML-File ungefähr so dargestellt wird, wie das Serverdokument über die Form "Server"...
Das wird wohl noch ein bisschen viel Arbeit. Aber ich denke, dass sich dass dann sehen lassen kann...

To be continued...
Gruß
Johnson

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: DXL originalgetreu importieren
« Antwort #16 am: 20.04.09 - 17:24:11 »
Mit der Formatierung ist es halt eine Frage wie du das html schreibst.
Genauso wie das Dokument in Notes dürfte aber schwierig sein, da im dxl die items unsortiert sind.

Meine zusätzlichen Features sind:
- leere Textfelder werden gar nicht angezeigt:
Code
<xsl:template match="/d:document/d:item/d:text" mode="item">
	<xsl:param name="name"/>
	<xsl:if test="string-length(normalize-space(text())) > 0">
	<tr>
		<td class="key">
			<xsl:value-of select="$name"/>
		</td>
	<td class="value">
		<xsl:value-of select="text()"/>
	</td>
	</tr>
	</xsl:if>
</xsl:template>
Mehrfachwertefelder werden bei Textfeldern mit Komma getrennt:
Code
<xsl:template match="/d:document/d:item/d:textlist/d:text" mode="item">
		<xsl:if test="position() > 1">, </xsl:if><xsl:value-of select="text()"/>
</xsl:template>

Ansonsten gefallen mir auch manche Sachen besser  bei deinem code. Wenn ich morgen Zeit hab, mach ich einen merge. Bin auch nicht der Weltmeister in xslt. Will aber jetzt besser werden.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: DXL originalgetreu importieren
« Antwort #17 am: 21.04.09 - 11:50:57 »
Leere Felder nicht anzeigen ist schön und gut. "No news are good news" ;) Aber der Hammer kommt noch später, wenn die Änderungen, die in einem Serverdokument gemacht wurden, markiert oder hervorgehoben werden sollen. Ich hoffe meine Admins kommen nicht auf den Gedanken, sonst wird übel.

Ich denke aber, dass es für den Betrachter der HTML-Files (also der transformierten DXL-Files) angenehmer ist, wenn diese dem Layout der Serverform am nächsten kommen. D.h. leere Felder werden dort auch angezeigt.

So sollte es dann aussehen: s. Anhang serverdoc.html.txt

Das dazugehörige xsl: s. Anhang serverdoc.xsl.txt
Hier gefällt mir nicht, dass ich jedes Feld einzeln angebe. Hat dafür jemand eine bessere Vorgehensweise?
Ebenso muss ich noch, wie schon gesagt, die Aliasnamen übersetzen (1=Enabled oder 0=Disabled etc).

Ich habe langsam das Gefühl, dass ich hier mit Kanonen auf Vögel schieße.

Gruß
Johnson

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: DXL originalgetreu importieren
« Antwort #18 am: 21.04.09 - 18:43:55 »
Ich würd mir überlegen einen Generator schreiben, der das xslt erzeugt.
Der Generator kann dann verwendet werden, um verschiedene dxls in html zu konvertieren.

Wirklich Variabel sind ja die Feldnamen und in welchem Tab die stehen. Diese Informationen kriegst du nicht aus dem dxl heraus.
Man könnte aber wie gesagt einen Generator schreiben der gemäss einer einfacheren xml-Konfigurationsdatei diese dxl Dateien mit den gewünschten xpath Statements und Labels erzeugt.
Hoffe,  das ist irgendwie verständlich. Vielleicht setz ich mich da mal dran.
Aliasnamen mußt du wohl auch per Hand machen. Es sei denn du exportierst die Form als dxl. Da stehen die Aliasnamen irgendwo drin. Aber das wird möglicherweise einfach zu kompliziert.
Generator könnte sich lohnen. Aliase könnten da auch verarbeitet werden.

Gruß Axel

Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz