亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xmlparser.java

?? 這是STRUTS1.2。6的開發包。。這是我從芝APACHE網站下下來
?? JAVA
字號:
/*
 * $Id: XmlParser.java 54929 2004-10-16 16:38:42Z germuska $ 
 *
 * Copyright 1999-2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package org.apache.struts.tiles.xmlDefinition;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;

/**
 * Parse an XML definitions file.
 */
public class XmlParser
{

    /** Associated digester. */
  protected Digester digester;
    /**
     * Should we use a validating XML parser to read the configuration file.
     * Default is <code>false</code>.
     */
    protected boolean validating = false;
    /**
     * The set of public identifiers, and corresponding resource names for
     * the versions of the configuration file DTDs we know about.  There
     * <strong>MUST</strong> be an even number of Strings in this list!
     */
    protected String registrations[] = {
        "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN",
        "/org/apache/struts/resources/tiles-config_1_1.dtd",
    };

     /**
      * Constructor.
      * Creates a digester parser and initializes syntax rules.
      */
  public XmlParser()
  {
	digester = new Digester();
	digester.setValidating(validating);
	digester.setNamespaceAware(true);
	digester.setUseContextClassLoader(true);
	// Register our local copy of the DTDs that we can find
  for (int i = 0; i < registrations.length; i += 2) {
      URL url = this.getClass().getResource(registrations[i+1]);
      if (url != null)
          {
          digester.register(registrations[i], url.toString());
          }
  }
    // Init syntax rules
  initDigester( digester );
  }

    /**
     * Set digester validating flag.
     */
  public void setValidating( boolean validating )
    {
    digester.setValidating( validating);
    }


   /**
    * Init digester for components syntax.
    * This is an old set of rules, left for backward compatibility.
    * @param digester Digester instance to use.
    */
  private void initDigesterForComponentsDefinitionsSyntax( Digester digester )
  {
	 // Common constants
  String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition";
  String DEFINITION_TAG = "component-definitions/definition";
  String definitionHandlerClass = PACKAGE_NAME + ".XmlDefinition";

  String PUT_TAG  = DEFINITION_TAG + "/put";
  String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute";

  String LIST_TAG = DEFINITION_TAG + "/putList";
  String listHandlerClass     = PACKAGE_NAME + ".XmlListAttribute";

  String ADD_LIST_ELE_TAG = LIST_TAG + "/add";

    // syntax rules
	digester.addObjectCreate(  DEFINITION_TAG, definitionHandlerClass );
	digester.addSetProperties( DEFINITION_TAG);
	digester.addSetNext(       DEFINITION_TAG, "putDefinition", definitionHandlerClass);
    // put / putAttribute rules
	digester.addObjectCreate(  PUT_TAG, putAttributeHandlerClass);
	digester.addSetNext(       PUT_TAG, "addAttribute", putAttributeHandlerClass);
	digester.addSetProperties( PUT_TAG);
	digester.addCallMethod(    PUT_TAG, "setBody", 0);
    // list rules
	digester.addObjectCreate(  LIST_TAG, listHandlerClass);
	digester.addSetProperties( LIST_TAG);
	digester.addSetNext(       LIST_TAG, "addAttribute", putAttributeHandlerClass);
    // list elements rules
    // We use Attribute class to avoid rewriting a new class.
    // Name part can't be used in listElement attribute.
	digester.addObjectCreate(  ADD_LIST_ELE_TAG, putAttributeHandlerClass);
	digester.addSetNext(       ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass);
	digester.addSetProperties( ADD_LIST_ELE_TAG);
	digester.addCallMethod(    ADD_LIST_ELE_TAG, "setBody", 0);
  }

   /**
    * Init digester for Tiles syntax.
    * Same as components, but with first element = tiles-definitions
    * @param digester Digester instance to use.
    */
  private void initDigesterForTilesDefinitionsSyntax( Digester digester )
  {
	 // Common constants
  String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition";
  String DEFINITION_TAG = "tiles-definitions/definition";
  String definitionHandlerClass = PACKAGE_NAME + ".XmlDefinition";

  String PUT_TAG  = DEFINITION_TAG + "/put";
  String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute";

  //String LIST_TAG = DEFINITION_TAG + "/putList";
    // List tag value
  String LIST_TAG = "putList";
  String DEF_LIST_TAG = DEFINITION_TAG + "/" + LIST_TAG;
  String listHandlerClass     = PACKAGE_NAME + ".XmlListAttribute";
    // Tag value for adding an element in a list
  String ADD_LIST_ELE_TAG = "*/" + LIST_TAG + "/add";

    // syntax rules
	digester.addObjectCreate(  DEFINITION_TAG, definitionHandlerClass );
	digester.addSetProperties( DEFINITION_TAG);
	digester.addSetNext(       DEFINITION_TAG, "putDefinition", definitionHandlerClass);
    // put / putAttribute rules
    // Rules for a same pattern are called in order, but rule.end() are called
    // in reverse order.
    // SetNext and CallMethod use rule.end() method. So, placing SetNext in
    // first position ensure it will be called last (sic).
	digester.addObjectCreate(  PUT_TAG, putAttributeHandlerClass);
	digester.addSetNext(       PUT_TAG, "addAttribute", putAttributeHandlerClass);
	digester.addSetProperties( PUT_TAG);
	digester.addCallMethod(    PUT_TAG, "setBody", 0);
    // Definition level list rules
    // This is rules for lists nested in a definition
	digester.addObjectCreate(  DEF_LIST_TAG, listHandlerClass);
	digester.addSetProperties( DEF_LIST_TAG);
	digester.addSetNext(       DEF_LIST_TAG, "addAttribute", putAttributeHandlerClass);
    // list elements rules
    // We use Attribute class to avoid rewriting a new class.
    // Name part can't be used in listElement attribute.
	digester.addObjectCreate(  ADD_LIST_ELE_TAG, putAttributeHandlerClass);
	digester.addSetNext(       ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass);
	digester.addSetProperties( ADD_LIST_ELE_TAG);
	digester.addCallMethod(    ADD_LIST_ELE_TAG, "setBody", 0);

    // nested list elements rules
    // Create a list handler, and add it to parent list
  String NESTED_LIST = "*/" + LIST_TAG + "/" + LIST_TAG;
	digester.addObjectCreate(  NESTED_LIST, listHandlerClass);
	digester.addSetProperties( NESTED_LIST);
	digester.addSetNext(       NESTED_LIST, "add", putAttributeHandlerClass);

    // item elements rules
    // We use Attribute class to avoid rewriting a new class.
    // Name part can't be used in listElement attribute.
  //String ADD_WILDCARD = LIST_TAG + "/addItem";
  // non String ADD_WILDCARD = LIST_TAG + "/addx*";
  String ADD_WILDCARD = "*/item";
  String menuItemDefaultClass = "org.apache.struts.tiles.beans.SimpleMenuItem";
	digester.addObjectCreate(  ADD_WILDCARD, menuItemDefaultClass, "classtype");
	digester.addSetNext(       ADD_WILDCARD, "add", "java.lang.Object");
	digester.addSetProperties( ADD_WILDCARD);

    // bean elements rules
  String BEAN_TAG = "*/bean";
  String beanDefaultClass = "org.apache.struts.tiles.beans.SimpleMenuItem";
	digester.addObjectCreate(  BEAN_TAG, beanDefaultClass, "classtype");
	digester.addSetNext(       BEAN_TAG, "add", "java.lang.Object");
	digester.addSetProperties( BEAN_TAG);

    // Set properties to surrounding element
  digester.addSetProperty(BEAN_TAG+ "/set-property", "property", "value");
  }

   /**
    * Init digester in order to parse instances definition file syntax.
    * Instances is an old name for "definition". This method is left for
    * backwards compatibility.
    * @param digester Digester instance to use.
    */
  private void initDigesterForInstancesSyntax( Digester digester )
  {
    	// Build a digester to process our configuration resource
  String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition";
  String INSTANCE_TAG = "component-instances/instance";
  String instanceHandlerClass = PACKAGE_NAME + ".XmlDefinition";

  String PUT_TAG = INSTANCE_TAG + "/put";
  String PUTATTRIBUTE_TAG = INSTANCE_TAG + "/putAttribute";
  String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute";

  String LIST_TAG     = INSTANCE_TAG + "/putList";
  String listHandlerClass     = PACKAGE_NAME + ".XmlListAttribute";

  String ADD_LIST_ELE_TAG = LIST_TAG + "/add";

    // component instance rules
	digester.addObjectCreate(  INSTANCE_TAG, instanceHandlerClass );
	digester.addSetProperties( INSTANCE_TAG);
	digester.addSetNext(       INSTANCE_TAG, "putDefinition", instanceHandlerClass);
    // put / putAttribute rules
	digester.addObjectCreate(  PUTATTRIBUTE_TAG, putAttributeHandlerClass);
	digester.addSetProperties( PUTATTRIBUTE_TAG);
	digester.addSetNext(       PUTATTRIBUTE_TAG, "addAttribute", putAttributeHandlerClass);
    // put / putAttribute rules
	digester.addObjectCreate(  PUT_TAG, putAttributeHandlerClass);
	digester.addSetProperties( PUT_TAG);
	digester.addSetNext(       PUT_TAG, "addAttribute", putAttributeHandlerClass);
    // list rules
	digester.addObjectCreate(  LIST_TAG, listHandlerClass);
	digester.addSetProperties( LIST_TAG);
	digester.addSetNext(       LIST_TAG, "addAttribute", putAttributeHandlerClass);
    // list elements rules
    // We use Attribute class to avoid rewriting a new class.
    // Name part can't be used in listElement attribute.
	digester.addObjectCreate(  ADD_LIST_ELE_TAG, putAttributeHandlerClass);
	digester.addSetProperties( ADD_LIST_ELE_TAG);
	digester.addSetNext(       ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass);
  }

   /**
    * Init digester.
    * @param digester Digester instance to use.
    */
  protected void initDigester( Digester digester )
  {
  initDigesterForTilesDefinitionsSyntax( digester );
  initDigesterForComponentsDefinitionsSyntax( digester );
  initDigesterForInstancesSyntax( digester );
  }

  /**
   * Parse input reader and add encountered definitions to definitions set.
   * @param in Input stream.
   * @param definitions Xml Definitions set to which encountered definition are added.
   * @throws IOException On errors during file parsing.
   * @throws SAXException On errors parsing XML.
   */
  public void parse( InputStream in, XmlDefinitionsSet definitions ) throws IOException, SAXException
  {
	try
    {
      // set first object in stack
    //digester.clear();
    digester.push(definitions);
      // parse
	  digester.parse(in);
	  in.close();
	  }
  catch (SAXException e)
    {
	  //throw new ServletException( "Error while parsing " + mappingConfig, e);
    throw e;
	  }

  }

    /**
     * Main method to check file syntax.
     */
  public static void main(String[] args)
  {
  //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-struts/WEB-INF/tiles-examples-defs.xml";
  String filename = "E:/programs/jakarta-tomcat-4.0.3/webapps/wtiles-struts/WEB-INF/tiles-examples-defs.xml";
  //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-struts/WEB-INF/tilesDefinitions.xml";
  //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-channel/WEB-INF/componentDefinitions.xml";
  //String filename2 = "E:/programs/jakarta-tomcat/webapps/wtiles-tutorial/WEB-INF/componentDefinitions.xml";


    if( args.length > 1 )
      {
      filename = args[1];
      } // end if

  System.out.println( "Read file '" + filename  +"'" );

  InputStream input = null;
  // InputStream input2 = null;
    // Open file
    try
      {
	    input = new BufferedInputStream(
                             new FileInputStream( filename) );
	//    input2 = new BufferedInputStream(
          //                   new FileInputStream( filename2) );
      }
     catch( IOException ex )
      {
      System.out.println( "can't open file '" + filename + "' : " + ex.getMessage() );
      }
    // Check file syntax
    try
      {
	    XmlParser parser = new XmlParser();
      parser.setValidating(true);
      XmlDefinitionsSet definitions = new XmlDefinitionsSet();
        System.out.println( "  Parse file" );
      parser.parse( input, definitions);
      //  System.out.println( "  Check file 2" );
      //parser.parse( input2, definitions);
        System.out.println( "  done." );
      System.out.println( "  Result : " + definitions.toString() );
      }
     catch( Exception ex )
      {
      System.out.println( "Error during parsing '" + filename + "' : " + ex.getMessage() );
      ex.printStackTrace();
      }
  }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91黄视频在线观看| 中文字幕亚洲一区二区av在线 | 欧美亚洲国产一区二区三区va| 色香蕉久久蜜桃| 久久久午夜电影| 偷拍自拍另类欧美| 一本色道久久综合亚洲91| 久久嫩草精品久久久精品| 香蕉成人啪国产精品视频综合网 | 91黄色免费版| 久久久噜噜噜久久中文字幕色伊伊| 亚洲尤物在线视频观看| youjizz久久| 日本一区二区三区电影| 老司机精品视频在线| 欧美日韩国产中文| 亚洲一区二区三区美女| 99精品在线观看视频| 国产精品三级av在线播放| 国产精品一区专区| 日韩三级高清在线| 日本v片在线高清不卡在线观看| 色综合天天综合给合国产| 国产精品网站在线观看| 国产乱码精品一区二区三区av| 91麻豆精品久久久久蜜臀| 午夜激情一区二区三区| 欧美男生操女生| 亚洲电影第三页| 欧美日韩高清影院| 亚洲国产cao| 欧美另类变人与禽xxxxx| 一区二区三区欧美激情| 在线精品视频一区二区| 亚洲一区免费视频| 欧美日韩在线免费视频| 午夜av电影一区| 欧美久久一二三四区| 免费成人美女在线观看.| 欧美一级淫片007| 国产资源在线一区| 国产精品久久久久久久久免费樱桃 | 26uuu亚洲综合色欧美| 久久99精品久久久久久国产越南| 精品免费视频一区二区| 国产一区不卡视频| 18成人在线观看| 欧美欧美午夜aⅴ在线观看| 奇米精品一区二区三区在线观看一 | 国产米奇在线777精品观看| 日韩你懂的在线播放| 国产精品一区2区| 中文字幕日韩av资源站| 欧美三日本三级三级在线播放| 悠悠色在线精品| 日韩三级精品电影久久久| 大陆成人av片| 亚洲不卡在线观看| 久久久久亚洲蜜桃| 在线视频中文字幕一区二区| 日本va欧美va精品| 欧美国产日韩精品免费观看| 欧美伊人久久大香线蕉综合69| 日韩不卡免费视频| 亚洲国产激情av| 欧美日韩aaaaa| 国产91色综合久久免费分享| 亚洲乱码国产乱码精品精可以看 | 在线视频你懂得一区二区三区| 亚洲va欧美va天堂v国产综合| 日韩精品一区二区三区老鸭窝| 成人福利视频在线看| 午夜精品久久久久影视| 中文在线资源观看网站视频免费不卡| 在线观看日韩精品| 国产风韵犹存在线视精品| 亚洲电影你懂得| 国产精品嫩草影院av蜜臀| 日韩一二在线观看| 一本久道久久综合中文字幕| 开心九九激情九九欧美日韩精美视频电影 | 日韩国产在线观看一区| 国产午夜精品一区二区三区视频 | 国产美女一区二区三区| 亚洲一区二区三区在线| 国产精品全国免费观看高清| 欧美日本在线播放| 91亚洲精品久久久蜜桃网站| 精品无码三级在线观看视频 | 欧美精品高清视频| 懂色一区二区三区免费观看| 青草国产精品久久久久久| 中文字幕乱码日本亚洲一区二区 | 美女视频黄 久久| 一区二区不卡在线播放 | 成人午夜精品在线| 麻豆91精品视频| 日本不卡视频一二三区| 香蕉av福利精品导航| 亚洲欧洲精品一区二区三区| 国产午夜三级一区二区三| 26uuu欧美日本| 精品日韩欧美一区二区| 91精品国产全国免费观看| 8v天堂国产在线一区二区| 欧美亚洲一区二区在线观看| 日本国产一区二区| 欧洲精品视频在线观看| 一本大道久久a久久综合| av不卡免费在线观看| 不卡的电视剧免费网站有什么| 国产99久久精品| 国产精品一二一区| 国产精品一级在线| 成人免费毛片a| 99综合电影在线视频| 91影院在线免费观看| 91精品办公室少妇高潮对白| 欧美这里有精品| 9191成人精品久久| 日韩午夜激情电影| 国产日韩一级二级三级| 亚洲国产精品av| 亚洲精品国产成人久久av盗摄| 亚洲精品国产精华液| 日韩中文字幕麻豆| 黄色精品一二区| 9i看片成人免费高清| 欧美在线观看18| 欧美mv日韩mv亚洲| 国产精品久久久久国产精品日日| 亚洲人亚洲人成电影网站色| 亚洲一级二级在线| 久久精品国产精品亚洲综合| 国产精品一区二区久久精品爱涩| 成人久久视频在线观看| 欧美午夜一区二区三区免费大片| 制服.丝袜.亚洲.另类.中文| 欧美mv和日韩mv的网站| 国产精品久久久爽爽爽麻豆色哟哟 | 国产精品日韩成人| 亚洲精品国产a久久久久久| 亚洲一卡二卡三卡四卡| 紧缚奴在线一区二区三区| 成人爱爱电影网址| 欧美高清视频不卡网| 国产亚洲精品7777| 午夜精品久久久久久久99樱桃 | 久久久国产精品不卡| 亚洲欧美成aⅴ人在线观看| 日本三级亚洲精品| 国产成人高清在线| 欧美日韩国产免费一区二区| 久久亚洲综合av| 亚洲综合一区二区三区| 国产乱码一区二区三区| 欧美伊人久久久久久久久影院 | 99久久国产综合精品麻豆| 欧美视频中文字幕| 国产欧美日韩三级| 日本成人在线电影网| 99在线视频精品| 精品嫩草影院久久| 亚洲成人免费视| 99精品久久99久久久久| 精品国产乱码久久久久久蜜臀| 夜夜嗨av一区二区三区中文字幕| 国产乱码精品1区2区3区| 欧美精品丝袜久久久中文字幕| 亚洲欧洲日韩综合一区二区| 国产在线播精品第三| 777午夜精品免费视频| 亚洲欧美国产三级| 懂色一区二区三区免费观看| 日韩久久久精品| 日韩国产精品91| 欧美最猛性xxxxx直播| 日韩一区在线播放| 国产成人午夜精品影院观看视频| 日韩一区二区不卡| 婷婷丁香久久五月婷婷| 91激情在线视频| 亚洲欧美日韩在线| 99精品欧美一区二区三区综合在线| 久久这里只精品最新地址| 蜜臀av在线播放一区二区三区| 欧美日韩亚洲丝袜制服| 亚洲一区二区三区小说| 在线观看日韩国产| 亚洲午夜电影在线| 欧美日韩国产美女| 三级久久三级久久| 欧美亚洲综合久久| 亚洲激情在线播放| 日本丶国产丶欧美色综合| 亚洲男同性恋视频| 91黄视频在线观看| 亚洲va国产天堂va久久en| 欧美日韩免费在线视频| 香蕉av福利精品导航|