protected void scanAttribute(XMLAttributes paramXMLAttributes) throws IOException, XNIException {
   if (this.fNamespaces) {
     this.fEntityScanner.scanQName(this.fAttributeQName);
   } else {
     String str = this.fEntityScanner.scanName();
     this.fAttributeQName.setValues(null, str, str, null);
   }
   this.fEntityScanner.skipSpaces();
   if (!this.fEntityScanner.skipChar(61)) {
     reportFatalError(
         "EqRequiredInAttribute",
         new Object[] {this.fCurrentElement.rawname, this.fAttributeQName.rawname});
   }
   this.fEntityScanner.skipSpaces();
   int i = paramXMLAttributes.getLength();
   int j = paramXMLAttributes.addAttribute(this.fAttributeQName, XMLSymbols.fCDATASymbol, null);
   if (i == paramXMLAttributes.getLength()) {
     reportFatalError(
         "AttributeNotUnique",
         new Object[] {this.fCurrentElement.rawname, this.fAttributeQName.rawname});
   }
   boolean bool =
       scanAttributeValue(
           this.fTempString,
           this.fTempString2,
           this.fAttributeQName.rawname,
           this.fIsEntityDeclaredVC,
           this.fCurrentElement.rawname);
   paramXMLAttributes.setValue(j, this.fTempString.toString());
   if (!bool) {
     paramXMLAttributes.setNonNormalizedValue(j, this.fTempString2.toString());
   }
   paramXMLAttributes.setSpecified(j, true);
 }
Esempio n. 2
0
 public void startElement(QName element, XMLAttributes attrs, Augmentations augs)
     throws XNIException {
   if (this.baseUrl != null) {
     try {
       int attrCount = attrs != null ? attrs.getLength() : 0;
       for (int i = 0; i < attrCount; i++) {
         String aname = attrs.getQName(i);
         /** update by jiangjun 2011-5-24 补全file的相对地址 */
         if (aname.matches("href|src|action|lsrc|real_src|dynamic-src|file")) {
           String avalue = attrs.getValue(i);
           if (null != avalue & !"".equals(avalue) & avalue.indexOf("javascript:") < 0) {
             attrs.setValue(i, UrlUtil.guessURL(baseUrl, avalue));
           }
         }
       }
     } catch (MalformedURLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
     }
   }
   String depth = String.valueOf(fElementDepth);
   attrs.addAttribute(
       new QName(element.localpart, DEPTH_NAME, DEPTH_NAME, element.uri), "String", depth);
   if (baseUrl != null
       && baseUrl.toString().indexOf("app.wumii.com") == -1
       && STYLE.equalsIgnoreCase(element.rawname)) {
     if (attrs.getValue("media") != null && !"screen".equalsIgnoreCase(attrs.getValue("media"))) {
       notCollectCss = 1;
     }
     styleBuffer = new StringBuffer();
   } else {
     super.startElement(element, attrs, augs);
     fElementDepth++;
   }
 }
Esempio n. 3
0
  @Override
  public void emptyElement(QName element, XMLAttributes attributes, Augmentations augs)
      throws XNIException {
    if ("base".equalsIgnoreCase(element.rawname)) {
      String hrefValue = attributes.getValue("href");
      if (hrefValue != null) {
        try {
          this.baseUrl = new URL(hrefValue);
        } catch (MalformedURLException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    } else if (this.baseUrl != null) {
      try {
        int attrCount = attributes != null ? attributes.getLength() : 0;
        for (int i = 0; i < attrCount; i++) {
          String aname = attributes.getQName(i);
          /** update by jiangjun 2011-5-24 补全file的相对地址 */
          if (aname.matches("href|src|action|lsrc|real_src|dynamic-src|file")) {
            String avalue = attributes.getValue(i);
            if (null != avalue & !"".equals(avalue) & avalue.indexOf("javascript:") < 0) {
              // 朱磊改,例如:http://www.qiushibaike.net/页面中图片相对地址为
              // ../../aaa.jpg 目前已经是根目录了,上一级不存在
              if (avalue.indexOf(baseUrl.getHost()) == -1 && avalue.startsWith("..")) {
                avalue = avalue.substring(avalue.lastIndexOf("../") + 3);
              }

              attributes.setValue(i, UrlUtil.guessURL(baseUrl, avalue));
            }
          }
        }
      } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    if ("link".equalsIgnoreCase(element.rawname)) {
      String typeValue = attributes.getValue("type");
      if (typeValue != null) {
        if (typeValue.indexOf("css") >= 0) {
          return;
        }
      } else {
        return;
      }
    }
    if (delMark == 1) {
      delMark = 0;
      return;
    }
    String depth = String.valueOf(fElementDepth);
    attributes.addAttribute(new QName(null, DEPTH_NAME, DEPTH_NAME, null), "String", depth);
    super.emptyElement(element, attributes, augs);
  }
Esempio n. 4
0
 public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
     throws SAXException {
   try {
     if (!pushedContext) namespaceContext.pushContext();
     else pushedContext = false;
     for (int i = 0, len = atts.getLength(); i < len; i++)
       attributes.addAttribute(
           makeQName(atts.getURI(i), atts.getLocalName(i), atts.getQName(i)),
           symbolTable.addSymbol(atts.getType(i)),
           atts.getValue(i));
     schemaValidator.startElement(makeQName(namespaceURI, localName, qName), attributes, null);
     attributes.removeAllAttributes();
   } catch (XNIException e) {
     throw toSAXException(e);
   }
 }
  /** Binds namespaces. */
  protected void bindNamespaces(QName element, XMLAttributes attrs) {

    // split element qname
    splitQName(element);

    // declare namespace prefixes
    int attrCount = attrs != null ? attrs.getLength() : 0;
    for (int i = attrCount - 1; i >= 0; i--) {
      attrs.getName(i, fQName);
      String aname = fQName.rawname;
      String ANAME = aname.toUpperCase();
      if (ANAME.startsWith("XMLNS:") || ANAME.equals("XMLNS")) {
        int anamelen = aname.length();

        // get parts
        String aprefix = anamelen > 5 ? aname.substring(0, 5) : null;
        String alocal = anamelen > 5 ? aname.substring(6) : aname;
        String avalue = attrs.getValue(i);

        // re-case parts and set them back into attributes
        if (anamelen > 5) {
          aprefix = modifyName(aprefix, NAMES_LOWERCASE);
          alocal = modifyName(alocal, fNamesElems);
          aname = aprefix + ':' + alocal;
        } else {
          alocal = modifyName(alocal, NAMES_LOWERCASE);
          aname = alocal;
        }
        fQName.setValues(aprefix, alocal, aname, null);
        attrs.setName(i, fQName);

        // declare prefix
        String prefix = alocal != aname ? alocal : "";
        String uri = avalue.length() > 0 ? avalue : null;
        if (fOverrideNamespaces
            && prefix.equals(element.prefix)
            && HTMLElements.getElement(element.localpart, null) != null) {
          uri = fNamespacesURI;
        }
        fNamespaceContext.declarePrefix(prefix, uri);
      }
    }

    // bind element
    String prefix = element.prefix != null ? element.prefix : "";
    element.uri = fNamespaceContext.getURI(prefix);
    // REVISIT: The prefix of a qualified element name that is
    // bound to a namespace is passed (as recent as
    // Xerces 2.4.0) as "" for start elements and null
    // for end elements. Why? One of them is a bug,
    // clearly. -Ac
    if (element.uri != null && element.prefix == null) {
      element.prefix = "";
    }

    // do we need to insert namespace bindings?
    if (fInsertNamespaces
        && attrs != null
        && HTMLElements.getElement(element.localpart, null) != null) {
      if (element.prefix == null || fNamespaceContext.getURI(element.prefix) == null) {
        String xmlns = "xmlns" + ((element.prefix != null) ? ":" + element.prefix : "");
        fQName.setValues(null, xmlns, xmlns, null);
        attrs.addAttribute(fQName, "CDATA", fNamespacesURI);
        bindNamespaces(element, attrs);
        return;
      }
    }

    // bind attributes
    attrCount = attrs != null ? attrs.getLength() : 0;
    for (int i = 0; i < attrCount; i++) {
      attrs.getName(i, fQName);
      splitQName(fQName);
      prefix =
          !fQName.rawname.equals("xmlns") ? (fQName.prefix != null ? fQName.prefix : "") : "xmlns";
      // PATCH: Joseph Walton
      if (!prefix.equals("")) {
        fQName.uri = prefix.equals("xml") ? XML_URI : fNamespaceContext.getURI(prefix);
      }
      // NOTE: You would think the xmlns namespace would be handled
      // by NamespaceSupport but it's not. -Ac
      if (prefix.equals("xmlns") && fQName.uri == null) {
        fQName.uri = XMLNS_URI;
      }
      attrs.setName(i, fQName);
    }
  } // bindNamespaces(QName,XMLAttributes)