Kennt sich wer mit
XML-Transformationen aus?
Im Prinzip möchte ich die generierte "unformatierte"
XML formatiert ausgeben.
Aber ich bekomm es nicht hin, selbst nach dem ich viele Codes gefunden hab, die das machen sollen.
Am Liebsten wäre es mir, wenn der Code genauso aussieht, wie er am Anfang (siehe "
XML") aussah.
Und nein, preserveWhiteSpace=True ilft nix, denn ich will die
XML ja später erst generieren und dabei gibt es noch keine Idents.
Der folgende Code (siehe Anhang, da die
DP immernoch die Leerzeichen schrottet) funktioniert noch nicht richtig.
Die Idents stimmen nicht, die Parameter verschwinden zum Großteil,
<x />
wird zu
<x></x>
usw.
  ist kein echtes Leerzeichen, aber ich fand jetzt noch keinen Weg zu sagen, daß im xsl:copy die Leerzeichen erhalten bleiben sollen, es gibt nur die Befehler für die Leerzeichenerhaltung in der
XML, welche es ja noch nicht gibt, und #x20; wird dabei ebenso weggetrimt.
Delphi-Quellcode:
var
XML: IXMLDOMDocument;
XSL: IXMLDOMDocument;
i: Integer;
begin
XML :=
{$IF Declared(MSXMLDOMDocumentFactory)}MSXMLDOMDocumentFactory.
{$IFEND}CreateDOMDocument;
XML.async := False;
XML.preserveWhiteSpace := False;
if not XML.loadXML(
'
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'#13#10
+ '
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">'#13#10
+ '
<assemblyIdentity'#13#10
+ '
version="1.6.2.92"'#13#10
+ '
processorArchitecture="x86"'#13#10
+ '
name="himitsu.ManifestCreator"'#13#10
+ '
type="Win32"/>'#13#10
+ '
<description>creates windows manifest files</description>'#13#10
+ '
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">'#13#10
+ '
<security>'#13#10
+ '
<requestedPrivileges>'#13#10
+ '
<requestedExecutionLevel'#13#10
+ '
level="asInvoker"'#13#10
+ '
uiAccess="false"/>'#13#10
+ '
</requestedPrivileges>'#13#10
+ '
</security>'#13#10
+ '
</trustInfo>'#13#10
+ '
<dependency>'#13#10
+ '
<dependentAssembly>'#13#10
+ '
<assemblyIdentity'#13#10
+ '
type="win32"'#13#10
+ '
name="Microsoft.Windows.Common-Controls"'#13#10
+ '
version="6.0.0.0"'#13#10
+ '
publicKeyToken="6595b64144ccf1df"'#13#10
+ '
language="*"'#13#10
+ '
processorArchitecture="*"/>'#13#10
+ '
</dependentAssembly>'#13#10
+ '
</dependency>'#13#10
+ '
</assembly>')
then
with XML.parseError
do
raise EAccessViolation.CreateFmt('
%s'#13#10'
Line %d Col %d: "%s"',
[reason, line, linepos, Trim(Copy(srcText, linepos - 30, 80))]);
XSL :=
{$IF Declared(MSXMLDOMDocumentFactory)}MSXMLDOMDocumentFactory.
{$IFEND}CreateDOMDocument;
XSL.async := False;
if not XSL.loadXML(
'
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">'
+ '
<xsl:output method="xml" indent="yes" omit-xml-declaration="no" version="1.0" encoding="UTF-8" standalone="yes" />'
+ '
<xsl:strip-space elements="*" />'
+ '
<xsl:template match="/|node()|@*">'
+ '
<xsl:copy>'#10'
**<xsl:apply-templates select="node()|@*" /></xsl:copy>'
+ '
</xsl:template>'
+ '
</xsl:stylesheet>')
then
with XSL.parseError
do
raise EAccessViolation.CreateFmt('
%s'#13#10'
Line %d Col %d: "%s"',
[reason, line, linepos, Trim(Copy(srcText, linepos - 30, 80))]);
Memo1.Text :=
XML.transformNode(XSL);
Code:
<?
xml version="1.0" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-
com:
asm.v1">
<assemblyIdentity>
</assemblyIdentity>
<description>
creates windows manifest files</description>
<trustInfo xmlns="urn:schemas-microsoft-
com:
asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel>
</requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity>
</assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>