XSL xmlns usage problems during transform

Discussion in 'XML' started by jorgen.wahlund@gmail.com, Oct 26, 2005.

  1. Guest

    Hi

    I have problems with transforming a xml document with Xalan and
    javax.xml.Transformer.

    Following xsl is used:
    <xsl:stylesheet version='1.0'
    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
    xmlns:xalan="http://xml.apache.org/xslt"
    xmlns:java="java"
    xmlns:convert="com.foo.Class">

    <xsl:eek:utput method="xml"
    encoding="UTF-8"
    indent="yes"
    xalan:indent-amount="2"/>
    <and so on with specific transformation>
    </xsl:stylesheet>

    The xml parsed have the followin format:
    <?xml version="1.0" encoding="utf-16"?>
    <MessageHeader xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.foo2.com/XMLSchema/Envelope">
    <Message xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    messageId="EMI20051026093900046"
    xmlns="http://www.foo2.com/Schema.xsd">

    <and so on with specific tags>


    The problem I have is that the transformation, that earlier worked
    fine, has stopped to work. The only differense is the last part of the
    given xml. It has changed from:
    xmlns=""
    to
    xmlns="http://www.foo2.com/Schema.xsd"

    And the transformation stopps early without transforming the rest of
    the document.


    Questions:
    What does the xmlns field do actually?
    Can one override the xmlns field?
    Any other solutions?

    Remember that the xml given is from a another part and we cant control
    the xml sent to us.

    Thank you for your help
    J├Ârgen
    , Oct 26, 2005
    #1
    1. Advertising

  2. wrote:


    > Following xsl is used:
    > <xsl:stylesheet version='1.0'
    > xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
    > xmlns:xalan="http://xml.apache.org/xslt"
    > xmlns:java="java"
    > xmlns:convert="com.foo.Class">


    > The xml parsed have the followin format:
    > <?xml version="1.0" encoding="utf-16"?>
    > <MessageHeader xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    > xmlns="http://www.foo2.com/XMLSchema/Envelope">


    The problem is that various elements are in a default namespace defined
    with xmlns="namespaceURI" so those elements have a name without a prefix
    (e.g. MessageHeader) but are in a certain namespace.
    To match that with XPath 1.0 you need to bind a prefix to the default
    namespace and use that prefix in XPath expressions and XSLT match
    matterns. No change is needed on the XML input but inside of the
    stylesheet you need to add e.g.
    xmlns:pf1="http://www.foo2.com/XMLSchema/Envelope"
    xmlns:pf2="http://www.foo2.com/Schema.xsd"
    on the xsl:stylesheet element, then your XPath expressions can look alike
    /pf1:MessageHeader/pf2:Message
    to select elements in the namespaces bound to the prefixes used.



    --

    Martin Honnen
    http://JavaScript.FAQTs.com/
    Martin Honnen, Oct 26, 2005
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    0
    Views:
    1,332
  2. shaun
    Replies:
    1
    Views:
    935
    Martin Honnen
    May 19, 2006
  3. Greg Collins [Microsoft MVP]

    Communicate with a Database During an XSL Transform

    Greg Collins [Microsoft MVP], Sep 12, 2006, in forum: ASP .Net
    Replies:
    0
    Views:
    352
    Greg Collins [Microsoft MVP]
    Sep 12, 2006
  4. clover2411
    Replies:
    4
    Views:
    949
    Andy Dingley
    Jan 23, 2007
  5. afshar
    Replies:
    3
    Views:
    24,184
    aljar
    May 19, 2010
Loading...

Share This Page