Announcement

Collapse
No announcement yet.

Unnötige Namespaceangabe

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Unnötige Namespaceangabe

    Hallo,
    ich habe mal 2 Fragen zu meiner XSL Transformation (mit Saxon und MSXML4SP2)

    1.) Auf zweiter Ebene steht in meinen Elementen immer xmlns=""
    z.B. <Name xmlns="">
    Ich weiß nicht, wo das herkommt, und warum das da steht. Wichtig ist nur, dass es da nicht steht

    2.) Außerdem hab ich noch eine Frage zu der Formatierung der Ausgabe.
    Wenn im Ausgangs XML eine lehres Feld ist, soll die Ausgabe so aussehen:
    <Name></Name>
    ABER NICHT
    <Name/>

    Kann ich dies im Header oder anderswo hinterlegen?

  • #2
    Die leere Namespace-Ausgabe wird von einem verwendeten Default-Namespace kommen. Zeige mal das Stylesheet, welches vermutlich nur ein zusätzliches Attribut exclude-result-prefixes benötigt.

    Zur Ausgabe von <Name></Name> mal die Optionen des verwendeten Prozessors erkunden oder diesen Trick probieren:
    <Name><xsl:text></xsl:text></Name>

    Comment


    • #3
      Hi,

      der Trick mit dem <xsl:text> hat leider nicht geklappt. Ähnliches hab ich borher auch schon probiert. Den Prozessor muss ich mir noch ansehen.

      Mein Stylesheet sieht so aus:
      Code:
      <xsl:stylesheet version="2.0"
          xmlns:msxml="urn:schemas-microsoft-com:xslt"
          xmlns:msxsl="urn:schemas-microsoft-com:xslt"
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          xmlns:fn="http://www.w3.org/2005/xpath-functions"
          xmlns:myScript="urn:schemas-JFA-com:date">
      Das blöde ist ja auch, dass in dem Namespace nichts steht. Also nur xmlns="". Das hat mir das exclude widerum erschwert

      Comment


      • #4
        Das sollte so ausehen (xsl wird per default entfernt): exclude-result-prefixes="msxml msxsl xs fn myScript"

        Alternative zu <Name><xsl:text></xsl:text></Name>:
        <Name><xsl:value-of select="normalize-space('')"/></Name>

        Comment


        • #5
          Originally posted by Thomas Meinike View Post
          Das sollte so ausehen (xsl wird per default entfernt): exclude-result-prefixes="msxml msxsl xs fn myScript"
          Ok, ansich versteh ich das ja. Aber so bekomme ich doch nicht das lehre ns weg. Es steht ja wie gesagt in dem Element nur xmlns="" Ohne weiteren Inhalt.
          Und nun weiß ich ja nicht, was ich explizit excluden kann

          Originally posted by Thomas Meinike View Post
          Alternative zu <Name><xsl:text></xsl:text></Name>:
          <Name><xsl:value-of select="normalize-space('')"/></Name>
          Das funktioniert leider auch nicht. Hab schon einiges durchprobiert.... bis jetzt muss mindestens ein Lehrzeichen sein. Ich hoffe, dass ich dafür noch eine Option im Saxon Aufruf finde.

          Comment


          • #6
            Zeige mal etwas mehr Details von den XML- bzw. XSL-Dokumenten. Vermutlich gibt es noch einen nicht behandelten Default-Namespace im XML.

            Der genannte Versuch mit normalize-space('') funktioniert zumindest mit AltovaXML 2008.

            Comment


            • #7
              So, hier mal Ausschnitte von meinen Dateien:
              (Nur abgeänderte Ausschnitte, da ich den richtigen Inhalt nicht zeigen darf)

              XSLT:
              Code:
              <?xml version="1.0" encoding="UTF-8"?>
              <xsl:stylesheet version="2.0"
                  xmlns:msxml="urn:schemas-microsoft-com:xslt"
                  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema"
                  xmlns:fn="http://www.w3.org/2005/xpath-functions"
                  exclude-result-prefixes="msxml msxsl xs fn">
                <xsl:output version="1.0" method="xml" encoding="UTF-8" indent="yes"/>
              <xsl:template match="/">
                  <xsl:result-document  href="{concat($TgtBase,$SrcFile)}">
                    
                    <xsl:message terminate="no">
                      <xsl:value-of select="'Transform '"/>
                      <xsl:value-of select="$SrcFile"/>
                      <xsl:value-of select="':'"/>
                    </xsl:message>
              ...
              ...
              ...
              Müsste ja für das Problem so reichen.

              XML
              Code:
              ?xml version="1.0" encoding="UTF-8"?>
              <Interface IFName="XLS_TO_XML" SourcePath="C:\tmp" FileName="media3.XLS" FromSystem="Excel" FromSubSystem="" DestinationPath="" ToSystem="xxx" ToSubSystem="XML" createdBy="xxxAdmin" createdTS="2008-06-11T18:09:43+02:00">
                <Worksheets>
                  <Worksheet name="Test" id="1">
                    <Row id="0" wsName="Test">
                      <Col id="1"><![CDATA[KdName]]></Col>
                      <Col id="2"><![CDATA[bla]]></Col>
                      <Col id="7"><![CDATA[blubb]]></Col>
                      <Col id="11"><![CDATA[5,00]]></Col>
                      <Col id="14"><![CDATA[n]]></Col>
                      <Col id="15"><![CDATA[n => n/n in Spalte S]]></Col>
                      <Col id="19"><![CDATA[Summe:]]></Col>
                      <Col id="20"><![CDATA[0]]></Col>
                      <Col id="39"><![CDATA[0]]></Col>
                    </Row>
                    <Row id="1" wsName="Test">
                      <Col id="1"><![CDATA[Ort]]></Col>
                      <Col id="2"><![CDATA[0]]></Col>
                      <Col id="7"><![CDATA[FR AL]]></Col>
                      <Col id="11"><![CDATA[8,80]]></Col>
                      <Col id="15"><![CDATA[s => Spanne]]></Col>
                      <Col id="18"><![CDATA[     VKF-Verbrauch:]]></Col>
                      <Col id="39"><![CDATA[0]]></Col>
                    </Row>
                 </Worksheet>
                </Worksheets>
              </Interface>

              Comment


              • #8
                Ich hätte auf die Angabe eines Default-Namespaces xmlns="..." getippt, sehe im XML-Dokument aber keine Namespaces.

                Comment


                • #9
                  Nö... das ist recht schlicht aus ner Exel-Datei erzeugt worden.
                  Sonst noch jemand ne Idee?

                  Comment


                  • #10
                    Das wird ja immer verwirrender. Wenn im XML-Dokument keine relevanten Namespace-Angaben vorkommen, dann können diese auch im XSLT-Stylesheet entfallen. Poste ansonsten mal den auf das eigentliche Problem reduzierten Code zum Testen.

                    Comment


                    • #11
                      Da es mir gerade selbst mit den leeren xmlns=""-Ausgaben passiert ist, hier noch ein weiterer Antwortversuch. Setze im XSLT-Stylesheet den für das Ausgabedokument zuständigen Default-Namespace explizit, also <xsl:stylesheet ... xmlns="http://example.net/default_namespace">. Welcher NS das sein könnte, musst Du selbst herausfinden (wird im hier geposteten Code nicht deutlich).

                      Comment

                      Working...
                      X