Ich muss alle meine Attribute in der XML in Elemente mit einigen Bedingungen konvertieren. Sagen Sie zum Beispiel, dass einigen Attributen der "Wert" vorangestellt werden sollte. Ich bin soweit gekommen. Dazu muss ich auch meinen Namensraum ändern. Das konnte ich nicht erreichen.Wie ändert man den Namespace in xml mit xslt
XML
<Template xmlns="styling/1.0.0" Name="TemplateFromDictionary">
<Style Name="Default">
<Fill Color=""/>
<Stroke Color="0000FF" LineStyle="Single" Width="1"/>
<Symbol Color="FFFFFF" Name="default.png" ScaleX="100" ScaleY="100" ScaleMode="Drawing"/>
</Style>
<Style Name="Parcel">
<Fill Color="48F5F5F5"/>
<Stroke Color="C0C0C0" LineStyle="Single" Width="1"/>
<Symbol Color="FFFFFF" Name="default.png" ScaleX="100" ScaleY="100" ScaleMode="Drawing"/>
</Style>
</Template>
XSLT
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl"
xmlns:s="styling/1.0.0"
xmlns="styling/1.0.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="s:Style|s:Template">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:variable name="name">
<xsl:apply-templates select="." mode="name"/>
</xsl:variable>
<xsl:element name="{$name}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="@Color|@Width|@ScaleX|@ScaleY|@LeftIndent|@RightIndent|@FirstLineIndent|@SpaceBefore|@SpaceAfter|@Size" mode="name">
<xsl:value-of select="concat(name(), 'Value')"/>
</xsl:template>
<xsl:template match="@*" mode="name">
<xsl:value-of select="name()"/>
</xsl:template>
</xsl:stylesheet>
OUTPUT
<?xml version="1.0" encoding="utf-8"?>
<Template Name="TemplateFromDictionary" xmlns="styling/1.0.0">
<Style Name="Default">
<Fill>
<ColorValue></ColorValue>
</Fill>
<Stroke>
<ColorValue>0000FF</ColorValue>
<LineStyle>Single</LineStyle>
<WidthValue>1</WidthValue>
</Stroke>
<Symbol>
<ColorValue>FFFFFF</ColorValue>
<Name>default.png</Name>
<ScaleXValue>100</ScaleXValue>
<ScaleYValue>100</ScaleYValue>
<ScaleMode>Drawing</ScaleMode>
</Symbol>
</Style>
<Style Name="Parcel">
<Fill>
<ColorValue>48F5F5F5</ColorValue>
</Fill>
<Stroke>
<ColorValue>C0C0C0</ColorValue>
<LineStyle>Single</LineStyle>
<WidthValue>1</WidthValue>
</Stroke>
<Symbol>
<ColorValue>FFFFFF</ColorValue>
<Name>default.png</Name>
<ScaleXValue>100</ScaleXValue>
<ScaleYValue>100</ScaleYValue>
<ScaleMode>Drawing</ScaleMode>
</Symbol>
</Style>
</Template>
In Ausgang statt dessen
<Template Name="TemplateFromDictionary" xmlns="styling/1.0.0">
Ich brauche diese
<Template Name="TemplateFromDictionary" xmlns="styling/2.0.0">
Ich habe versucht, durch den Namespace in Xslt zu xmlns="styling/2.0.0"
Ändern Dies ist aber die Ergebnisse wie
<Fill><ColorValue xmlns="styling/2.0.0"></ColorValue></Fill>
Der Namespace gibt in alle Elemente eingebettet ist und das Vorlagenelement sieht gleich aus
<Template Name="TemplateFromDictionary" xmlns="styling/1.0.0">
Ich brauche die Ausgabe genau wie die oben erwähnte Ausgabe nur der Namespace in Template-Element muss geändert werden.
Ich verwandle dies mit C#.
Bitte helfen Sie mir dabei.
Es tut mir so leid, ich konnte es nicht verstehen. Könnten Sie bitte etwas näher ausführen? – shanmugharaj
Kurz gesagt, fügen Sie die erste Vorlage oben hinzu und ändern Sie die anderen beiden in Ihrem XSLT. Dann erhält jedes Element den neuen Namensraum. – zx485
Ich habe jetzt ein weiteres Problem in diesem. Dies ist eine neue Verbesserung, die ich tun muss. Tatsächlich muss beim Schreiben der Ausgabe für Symbole ' default.png ' dem Namenattribut das Präfix C: \ oder C: \ dwg \ vorangestellt werden, basierend auf dem Inhalt des Namensattributs 'png' oder 'dwg'. Ich habe versucht, die Bedingung hier in diesem '' zu setzen. Aber das funktionierte nicht. Könnten Sie mir bitte dabei helfen? –
shanmugharaj