You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by TAMURA Kent <ke...@hauN.org> on 2000/06/19 09:14:02 UTC

[Xalan-J] [PATCH] default namespace in XPath expressions

With Xalan-J on CVS, an XPathProcessorImpl does not resolve
default namespace for a name with no prefix.
For example,
	<XPath xmlns="http://www.w3.org/2000/02/xmldsig#">//Signature</XPath>

I wanted that the name "Signature" belonged to http://www.w3.org/2000/02/xmldsig#,
but XPathProcessorImpl#initXPath() did not call PrefixResolver
for "Signature".

The following patch fixes this problem, maybe:-)


Index: XPathProcessorImpl.java
===================================================================
RCS file: /home/cvspublic/xml-xalan/src/org/apache/xalan/xpath/XPathProcessorImpl.java,v
retrieving revision 1.31
diff -c -r1.31 XPathProcessorImpl.java
*** XPathProcessorImpl.java	2000/04/12 17:06:45	1.31
--- XPathProcessorImpl.java	2000/06/19 06:50:50
***************
*** 263,276 ****
              isNum = false;
              isStartOfPat = mapPatternElemPos(nesting, isStartOfPat, isAttrName);
              isAttrName = false;
!             if(-1 != posOfNSSep)
!             {
!               posOfNSSep = mapNSTokens(pat, startSubstring, posOfNSSep, i);
!             }
!             else
!             {
!               addToTokenQueue(pat.substring(startSubstring, i));
!             }
            }
            startSubstring = i;
            for(i++; (i < nChars) && ((c = pat.charAt(i)) != '\"'); i++);
--- 263,270 ----
              isNum = false;
              isStartOfPat = mapPatternElemPos(nesting, isStartOfPat, isAttrName);
              isAttrName = false;
!             if (-1 == posOfNSSep)  posOfNSSep = startSubstring;
!             posOfNSSep = mapNSTokens(pat, startSubstring, posOfNSSep, i);
            }
            startSubstring = i;
            for(i++; (i < nChars) && ((c = pat.charAt(i)) != '\"'); i++);
***************
*** 292,305 ****
            isNum = false;
            isStartOfPat = mapPatternElemPos(nesting, isStartOfPat, isAttrName);
            isAttrName = false;
!           if(-1 != posOfNSSep)
!           {
!             posOfNSSep = mapNSTokens(pat, startSubstring, posOfNSSep, i);
!           }
!           else
!           {
!             addToTokenQueue(pat.substring(startSubstring, i));
!           }
          }
          startSubstring = i;
          for(i++; (i < nChars) && ((c = pat.charAt(i)) != '\''); i++);
--- 286,293 ----
            isNum = false;
            isStartOfPat = mapPatternElemPos(nesting, isStartOfPat, isAttrName);
            isAttrName = false;
!           if (-1 != posOfNSSep)  posOfNSSep = startSubstring;
!           posOfNSSep = mapNSTokens(pat, startSubstring, posOfNSSep, i);
          }
          startSubstring = i;
          for(i++; (i < nChars) && ((c = pat.charAt(i)) != '\''); i++);
***************
*** 323,336 ****
            isNum = false;
            isStartOfPat = mapPatternElemPos(nesting, isStartOfPat, isAttrName);
            isAttrName = false;
!           if(-1 != posOfNSSep)
!           {
!             posOfNSSep = mapNSTokens(pat, startSubstring, posOfNSSep, i);
!           }
!           else
!           {
!             addToTokenQueue(pat.substring(startSubstring, i));
!           }
            startSubstring = -1;
          }
          break;
--- 311,318 ----
            isNum = false;
            isStartOfPat = mapPatternElemPos(nesting, isStartOfPat, isAttrName);
            isAttrName = false;
!           if (-1 != posOfNSSep)  posOfNSSep = startSubstring;
!           posOfNSSep = mapNSTokens(pat, startSubstring, posOfNSSep, i);
            startSubstring = -1;
          }
          break;
***************
*** 371,384 ****
            isNum = false;
            isStartOfPat = mapPatternElemPos(nesting, isStartOfPat, isAttrName);
            isAttrName = false;
!           if(-1 != posOfNSSep)
!           {
!             posOfNSSep = mapNSTokens(pat, startSubstring, posOfNSSep, i);
!           }
!           else
!           {
!             addToTokenQueue(pat.substring(startSubstring, i));
!           }
            startSubstring = -1;
          }
          else if(('/' == c) && isStartOfPat)
--- 353,360 ----
            isNum = false;
            isStartOfPat = mapPatternElemPos(nesting, isStartOfPat, isAttrName);
            isAttrName = false;
!           if (-1 != posOfNSSep)  posOfNSSep = startSubstring;
!           posOfNSSep = mapNSTokens(pat, startSubstring, posOfNSSep, i);
            startSubstring = -1;
          }
          else if(('/' == c) && isStartOfPat)
***************
*** 452,465 ****
      {
        isNum = false;
        isStartOfPat = mapPatternElemPos(nesting, isStartOfPat, isAttrName);
!       if(-1 != posOfNSSep)
!       {
!         posOfNSSep = mapNSTokens(pat, startSubstring, posOfNSSep, nChars);
!       }
!       else
!       {
!         addToTokenQueue(pat.substring(startSubstring, nChars));
!       }
      }
  
      if(0 == m_xpath.m_tokenQueueSize)
--- 428,435 ----
      {
        isNum = false;
        isStartOfPat = mapPatternElemPos(nesting, isStartOfPat, isAttrName);
!       if (-1 != posOfNSSep)  posOfNSSep = startSubstring;
!       posOfNSSep = mapNSTokens(pat, startSubstring, posOfNSSep, nChars);
      }
  
      if(0 == m_xpath.m_tokenQueueSize)


-- 
TAMURA, Kent