2012-03-26 14 views
0

Mein Client verlangt etwas ganz besonderes. Lassen Sie uns die folgende XML als Beispiel:Spezielle Anforderung zum Formatieren eines XML-Artikels

<?xml version="1.0"?> 
<article> 
    <paragraph> 
    <w p='0'>This</w> 
    <w p='1'>is</w> 
    <w p='2'>the</w> 
    <w p='3'>first</w> 
    <w p='4'>paragraph</w> 
    <w p='p'>.</w> 
    </paragraph> 
    <paragraph> 
    <w p='0'>This</w> 
    <w p='1'>is</w> 
    <w p='2'>the</w> 
    <w p='3'>second</w> 
    <w p='4'>paragraph</w> 
    <w p='p'>.</w> 
    </paragraph> 
</article> 

Mein Kunde alle Wörter zu „falten“ will, aber nicht die Faltung wir technische Jungs bedeuten. Was sie wollen, ist das Wort Node-Info außer dem Wort verbergen sich, so nach ihrer Bedeutung von „Falten“, sollte es wie folgt aussehen:

<?xml version="1.0"?> 
<article> 
    <paragraph>This is the first paragraph.</paragraph> 
    <paragraph>This is the second paragraph.</paragraph> 
</article> 

Was ich rede ist nur der Look-n-Feel, nicht der zugrunde liegende Inhalt, der durch diese Faltung nicht verändert werden sollte. (BEARBEITEN) Der Benutzer kann jedoch immer noch ein Wort auswählen und sein Attribut oder das Wort selbst ändern (irgendwie über eine Anwendungsschnittstelle),

Meine Frage ist, gibt es fertige Bibliotheken (ich bin mit C#) oder Apps, die auf diese Art von Anforderungen spezialisiert sind?

Danke.

Peter

Antwort

1

Da ist gar nichts "Besonderes" in dieser Anforderung. Es ist die Art von routinemäßiger Verarbeitung, die tausende Male pro Tag mit XSLT durchgeführt wird.

Es ist schwer, die Transformationsregeln aus Ihrem Beispiel abzuleiten, insbesondere genau zu wissen, wo Leerzeichen eingefügt werden sollen. Sie haben vor jedem Wort ein Leerzeichen eingefügt, außer dem ersten und dem, das nur "." Enthält. Wenn das wirklich die Regel ist, dann würde Ihre Transformation wie folgt aussehen:

<xsl:transform match="paragraph"> 
<paragraph><xsl:apply-templates/></paragraph> 
</xsl:transform> 

<xsl:template match="w[1]" priority="3"> 
    <xsl:value-of select="."/> 
</xsl:template> 

<xsl:template match="w[.='.']" priority="2"> 
    <xsl:value-of select="."/> 
</xsl:template> 

<xsl:template match="w" priority="1"> 
    <xsl:value-of select="concat(' ', .)"/> 
</xsl:template> 

In der Praxis können Sie auch benötigen zusätzliche Regeln für andere Dinge, die in den Daten auftauchen.

+0

Hallo Michael, Vielen Dank für Ihre Antwort. Die Leerzeicheneinfügung ist ein anderes Problem. Mein Punkt ist das sogenannte "Falten" meiner Kundenwünsche. Nach dem "Falten" kann der Benutzer immer noch die gefalteten Knoten (Wörter) auswählen und einige Beschriftungen vornehmen (z. B. Attribute aktualisieren usw.). –

+0

Nun, ich bin völlig verwirrt von Ihrer Anforderung. Sie sagen beide, dass das ursprüngliche Markup auf Word-Ebene entfernt werden sollte und dass es beibehalten werden sollte. Du kannst nicht beides haben. –

+0

Hallo Michael, es tut mir leid, dass ich es im ursprünglichen Beitrag nicht klar genug gemacht habe. Ich habe ein "(EDIT)" hinzugefügt. –

Verwandte Themen