org.springframework.util.xml.DomUtils#getChildElementsByTagName ( )源码实例Demo

下面列出了org.springframework.util.xml.DomUtils#getChildElementsByTagName ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

/**
 * Parse a props element.
 */
public Properties parsePropsElement(Element propsEle) {
	ManagedProperties props = new ManagedProperties();
	props.setSource(extractSource(propsEle));
	props.setMergeEnabled(parseMergeAttribute(propsEle));

	List<Element> propEles = DomUtils.getChildElementsByTagName(propsEle, PROP_ELEMENT);
	for (Element propEle : propEles) {
		String key = propEle.getAttribute(KEY_ATTRIBUTE);
		// Trim the text value to avoid unwanted whitespace
		// caused by typical XML formatting.
		String value = DomUtils.getTextValue(propEle).trim();
		TypedStringValue keyHolder = new TypedStringValue(key);
		keyHolder.setSource(extractSource(propEle));
		TypedStringValue valueHolder = new TypedStringValue(value);
		valueHolder.setSource(extractSource(propEle));
		props.put(keyHolder, valueHolder);
	}

	return props;
}
 
@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder beanDefinitionBuilder) {
	String contextPath = element.getAttribute("context-path");
	if (!StringUtils.hasText(contextPath)) {
		// Backwards compatibility with 3.x version of the xsd
		contextPath = element.getAttribute("contextPath");
	}
	if (StringUtils.hasText(contextPath)) {
		beanDefinitionBuilder.addPropertyValue("contextPath", contextPath);
	}

	List<Element> classes = DomUtils.getChildElementsByTagName(element, "class-to-be-bound");
	if (!classes.isEmpty()) {
		ManagedList<String> classesToBeBound = new ManagedList<String>(classes.size());
		for (Element classToBeBound : classes) {
			String className = classToBeBound.getAttribute("name");
			classesToBeBound.add(className);
		}
		beanDefinitionBuilder.addPropertyValue("classesToBeBound", classesToBeBound);
	}
}
 
@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
	List<Element> childElements = DomUtils.getChildElementsByTagName(element, "script");
	if (!childElements.isEmpty()) {
		List<String> locations = new ArrayList<String>(childElements.size());
		for (Element childElement : childElements) {
			locations.add(childElement.getAttribute("location"));
		}
		builder.addPropertyValue("scripts", locations.toArray(new String[locations.size()]));
	}
	builder.addPropertyValue("engineName", element.getAttribute("engine-name"));
	if (element.hasAttribute("render-object")) {
		builder.addPropertyValue("renderObject", element.getAttribute("render-object"));
	}
	if (element.hasAttribute("render-function")) {
		builder.addPropertyValue("renderFunction", element.getAttribute("render-function"));
	}
	if (element.hasAttribute("content-type")) {
		builder.addPropertyValue("contentType", element.getAttribute("content-type"));
	}
	if (element.hasAttribute("charset")) {
		builder.addPropertyValue("charset", Charset.forName(element.getAttribute("charset")));
	}
	if (element.hasAttribute("resource-loader-path")) {
		builder.addPropertyValue("resourceLoaderPath", element.getAttribute("resource-loader-path"));
	}
	if (element.hasAttribute("shared-engine")) {
		builder.addPropertyValue("sharedEngine", element.getAttribute("shared-engine"));
	}
}
 
private static Collection<BeanDefinition> parseEncryptTableRuleConfigurations(final Element element) {
    List<Element> encryptTableElements = DomUtils.getChildElementsByTagName(element, EncryptRuleBeanDefinitionTag.TABLE_TAG);
    Collection<BeanDefinition> result = new ManagedList<>(encryptTableElements.size());
    for (Element each : encryptTableElements) {
        result.add(parseEncryptTableRuleConfiguration(each));
    }
    return result;
}
 
@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
	List<Element> childElements = DomUtils.getChildElementsByTagName(element, "script");
	if (!childElements.isEmpty()) {
		List<String> locations = new ArrayList<>(childElements.size());
		for (Element childElement : childElements) {
			locations.add(childElement.getAttribute("location"));
		}
		builder.addPropertyValue("scripts", StringUtils.toStringArray(locations));
	}
	builder.addPropertyValue("engineName", element.getAttribute("engine-name"));
	if (element.hasAttribute("render-object")) {
		builder.addPropertyValue("renderObject", element.getAttribute("render-object"));
	}
	if (element.hasAttribute("render-function")) {
		builder.addPropertyValue("renderFunction", element.getAttribute("render-function"));
	}
	if (element.hasAttribute("content-type")) {
		builder.addPropertyValue("contentType", element.getAttribute("content-type"));
	}
	if (element.hasAttribute("charset")) {
		builder.addPropertyValue("charset", Charset.forName(element.getAttribute("charset")));
	}
	if (element.hasAttribute("resource-loader-path")) {
		builder.addPropertyValue("resourceLoaderPath", element.getAttribute("resource-loader-path"));
	}
	if (element.hasAttribute("shared-engine")) {
		builder.addPropertyValue("sharedEngine", element.getAttribute("shared-engine"));
	}
}
 
private static AbstractBeanDefinition parseComponentElement(Element element) {
	BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(ComponentFactoryBean.class);
	factory.addPropertyValue("parent", parseComponent(element));

	List<Element> childElements = DomUtils.getChildElementsByTagName(element, "component");
	if (!CollectionUtils.isEmpty(childElements)) {
		parseChildComponents(childElements, factory);
	}

	return factory.getBeanDefinition();
}
 
/**
 * Parse the {@code property} XML elements.
 */
protected void parseProperties(Element persistenceUnit, SpringPersistenceUnitInfo unitInfo) {
	Element propRoot = DomUtils.getChildElementByTagName(persistenceUnit, PROPERTIES);
	if (propRoot == null) {
		return;
	}
	List<Element> properties = DomUtils.getChildElementsByTagName(propRoot, "property");
	for (Element property : properties) {
		String name = property.getAttribute("name");
		String value = property.getAttribute("value");
		unitInfo.addProperty(name, value);
	}
}
 
private ManagedList<Object> extractBeanSubElements(Element parentElement, ParserContext parserContext) {
	ManagedList<Object> list = new ManagedList<Object>();
	list.setSource(parserContext.extractSource(parentElement));
	for (Element beanElement : DomUtils.getChildElementsByTagName(parentElement, "bean", "ref")) {
		Object object = parserContext.getDelegate().parsePropertySubElement(beanElement, null);
		list.add(object);
	}
	return list;
}
 
/**
 * Parse the {@code class} XML elements.
 */
protected void parseManagedClasses(Element persistenceUnit, SpringPersistenceUnitInfo unitInfo) {
	List<Element> classes = DomUtils.getChildElementsByTagName(persistenceUnit, MANAGED_CLASS_NAME);
	for (Element element : classes) {
		String value = DomUtils.getTextValue(element).trim();
		if (StringUtils.hasText(value)) {
			unitInfo.addManagedClassName(value);
		}
	}
}
 
/**
 * Parse the {@code jar-file} XML elements.
 */
protected void parseJarFiles(Element persistenceUnit, SpringPersistenceUnitInfo unitInfo) throws IOException {
	List<Element> jars = DomUtils.getChildElementsByTagName(persistenceUnit, JAR_FILE_URL);
	for (Element element : jars) {
		String value = DomUtils.getTextValue(element).trim();
		if (StringUtils.hasText(value)) {
			Resource[] resources = this.resourcePatternResolver.getResources(value);
			boolean found = false;
			for (Resource resource : resources) {
				if (resource.exists()) {
					found = true;
					unitInfo.addJarFileUrl(resource.getURL());
				}
			}
			if (!found) {
				// relative to the persistence unit root, according to the JPA spec
				URL rootUrl = unitInfo.getPersistenceUnitRootUrl();
				if (rootUrl != null) {
					unitInfo.addJarFileUrl(new URL(rootUrl, value));
				}
				else {
					logger.warn("Cannot resolve jar-file entry [" + value + "] in persistence unit '" +
							unitInfo.getPersistenceUnitName() + "' without root URL");
				}
			}
		}
	}
}
 
@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
	List<Element> childElements = DomUtils.getChildElementsByTagName(element, "template-loader-path");
	if (!childElements.isEmpty()) {
		List<String> locations = new ArrayList<>(childElements.size());
		for (Element childElement : childElements) {
			locations.add(childElement.getAttribute("location"));
		}
		if (locations.isEmpty()) {
			locations.add("/WEB-INF/");
		}
		builder.addPropertyValue("templateLoaderPaths", StringUtils.toStringArray(locations));
	}
}
 
private ManagedList<Object> extractBeanSubElements(Element parentElement, ParserContext parserContext) {
	ManagedList<Object> list = new ManagedList<Object>();
	list.setSource(parserContext.extractSource(parentElement));
	for (Element beanElement : DomUtils.getChildElementsByTagName(parentElement, "bean", "ref")) {
		Object object = parserContext.getDelegate().parsePropertySubElement(beanElement, null);
		list.add(object);
	}
	return list;
}
 
public static void setDatabasePopulator(Element element, BeanDefinitionBuilder builder) {
	List<Element> scripts = DomUtils.getChildElementsByTagName(element, "script");
	if (!scripts.isEmpty()) {
		builder.addPropertyValue("databasePopulator", createDatabasePopulator(element, scripts, "INIT"));
		builder.addPropertyValue("databaseCleaner", createDatabasePopulator(element, scripts, "DESTROY"));
	}
}
 
@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
	List<Element> childElements = DomUtils.getChildElementsByTagName(element, "template-loader-path");
	if (!childElements.isEmpty()) {
		List<String> locations = new ArrayList<String>(childElements.size());
		for (Element childElement : childElements) {
			locations.add(childElement.getAttribute("location"));
		}
		if (locations.isEmpty()) {
			locations.add("/WEB-INF/");
		}
		builder.addPropertyValue("templateLoaderPaths", locations.toArray(new String[locations.size()]));
	}
}
 
@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
	List<Element> childElements = DomUtils.getChildElementsByTagName(element, "script");
	if (!childElements.isEmpty()) {
		List<String> locations = new ArrayList<>(childElements.size());
		for (Element childElement : childElements) {
			locations.add(childElement.getAttribute("location"));
		}
		builder.addPropertyValue("scripts", StringUtils.toStringArray(locations));
	}
	builder.addPropertyValue("engineName", element.getAttribute("engine-name"));
	if (element.hasAttribute("render-object")) {
		builder.addPropertyValue("renderObject", element.getAttribute("render-object"));
	}
	if (element.hasAttribute("render-function")) {
		builder.addPropertyValue("renderFunction", element.getAttribute("render-function"));
	}
	if (element.hasAttribute("content-type")) {
		builder.addPropertyValue("contentType", element.getAttribute("content-type"));
	}
	if (element.hasAttribute("charset")) {
		builder.addPropertyValue("charset", Charset.forName(element.getAttribute("charset")));
	}
	if (element.hasAttribute("resource-loader-path")) {
		builder.addPropertyValue("resourceLoaderPath", element.getAttribute("resource-loader-path"));
	}
	if (element.hasAttribute("shared-engine")) {
		builder.addPropertyValue("sharedEngine", element.getAttribute("shared-engine"));
	}
}
 
private List<String> parseBroadcastTables(final Element element) {
    Element broadcastTableRulesElement = DomUtils.getChildElementByTagName(element, ShardingRuleBeanDefinitionTag.BROADCAST_TABLE_RULES_TAG);
    if (null == broadcastTableRulesElement) {
        return Collections.emptyList();
    }
    List<Element> broadcastTableRuleElements = DomUtils.getChildElementsByTagName(broadcastTableRulesElement, ShardingRuleBeanDefinitionTag.BROADCAST_TABLE_RULE_TAG);
    List<String> result = new LinkedList<>();
    for (Element each : broadcastTableRuleElements) {
        result.add(each.getAttribute(ShardingRuleBeanDefinitionTag.TABLE_ATTRIBUTE));
    }
    return result;
}
 
源代码17 项目: jstarcraft-core   文件: XmlUtility.java
/**
 * 获取元素中指定标签的唯一元素
 * 
 * @param element
 * @param tag
 * @return
 */
public static Element getUniqueElement(Element element, String tag) {
    List<Element> elements = DomUtils.getChildElementsByTagName(element, tag);
    if (elements.size() != 1) {
        String message = StringUtility.format("指定的标签[{}]在元素[{}]中不是唯一", tag, element);
        logger.error(message);
        throw new IllegalArgumentException(message);
    }
    return elements.get(0);
}
 
public static void setDatabasePopulator(Element element, BeanDefinitionBuilder builder) {
	List<Element> scripts = DomUtils.getChildElementsByTagName(element, "script");
	if (!scripts.isEmpty()) {
		builder.addPropertyValue("databasePopulator", createDatabasePopulator(element, scripts, "INIT"));
		builder.addPropertyValue("databaseCleaner", createDatabasePopulator(element, scripts, "DESTROY"));
	}
}
 
private void parseAspect(Element aspectElement, ParserContext parserContext) {
	String aspectId = aspectElement.getAttribute(ID);
	String aspectName = aspectElement.getAttribute(REF);

	try {
		this.parseState.push(new AspectEntry(aspectId, aspectName));
		List<BeanDefinition> beanDefinitions = new ArrayList<>();
		List<BeanReference> beanReferences = new ArrayList<>();

		List<Element> declareParents = DomUtils.getChildElementsByTagName(aspectElement, DECLARE_PARENTS);
		for (int i = METHOD_INDEX; i < declareParents.size(); i++) {
			Element declareParentsElement = declareParents.get(i);
			beanDefinitions.add(parseDeclareParents(declareParentsElement, parserContext));
		}

		// We have to parse "advice" and all the advice kinds in one loop, to get the
		// ordering semantics right.
		NodeList nodeList = aspectElement.getChildNodes();
		boolean adviceFoundAlready = false;
		for (int i = 0; i < nodeList.getLength(); i++) {
			Node node = nodeList.item(i);
			if (isAdviceNode(node, parserContext)) {
				if (!adviceFoundAlready) {
					adviceFoundAlready = true;
					if (!StringUtils.hasText(aspectName)) {
						parserContext.getReaderContext().error(
								"<aspect> tag needs aspect bean reference via 'ref' attribute when declaring advices.",
								aspectElement, this.parseState.snapshot());
						return;
					}
					beanReferences.add(new RuntimeBeanReference(aspectName));
				}
				AbstractBeanDefinition advisorDefinition = parseAdvice(
						aspectName, i, aspectElement, (Element) node, parserContext, beanDefinitions, beanReferences);
				beanDefinitions.add(advisorDefinition);
			}
		}

		AspectComponentDefinition aspectComponentDefinition = createAspectComponentDefinition(
				aspectElement, aspectId, beanDefinitions, beanReferences, parserContext);
		parserContext.pushContainingComponent(aspectComponentDefinition);

		List<Element> pointcuts = DomUtils.getChildElementsByTagName(aspectElement, POINTCUT);
		for (Element pointcutElement : pointcuts) {
			parsePointcut(pointcutElement, parserContext);
		}

		parserContext.popAndRegisterContainingComponent();
	}
	finally {
		this.parseState.pop();
	}
}
 
private RootBeanDefinition parseAttributeSource(Element attrEle, ParserContext parserContext) {
	List<Element> methods = DomUtils.getChildElementsByTagName(attrEle, METHOD_ELEMENT);
	ManagedMap<TypedStringValue, RuleBasedTransactionAttribute> transactionAttributeMap =
			new ManagedMap<>(methods.size());
	transactionAttributeMap.setSource(parserContext.extractSource(attrEle));

	for (Element methodEle : methods) {
		String name = methodEle.getAttribute(METHOD_NAME_ATTRIBUTE);
		TypedStringValue nameHolder = new TypedStringValue(name);
		nameHolder.setSource(parserContext.extractSource(methodEle));

		RuleBasedTransactionAttribute attribute = new RuleBasedTransactionAttribute();
		String propagation = methodEle.getAttribute(PROPAGATION_ATTRIBUTE);
		String isolation = methodEle.getAttribute(ISOLATION_ATTRIBUTE);
		String timeout = methodEle.getAttribute(TIMEOUT_ATTRIBUTE);
		String readOnly = methodEle.getAttribute(READ_ONLY_ATTRIBUTE);
		if (StringUtils.hasText(propagation)) {
			attribute.setPropagationBehaviorName(RuleBasedTransactionAttribute.PREFIX_PROPAGATION + propagation);
		}
		if (StringUtils.hasText(isolation)) {
			attribute.setIsolationLevelName(RuleBasedTransactionAttribute.PREFIX_ISOLATION + isolation);
		}
		if (StringUtils.hasText(timeout)) {
			try {
				attribute.setTimeout(Integer.parseInt(timeout));
			}
			catch (NumberFormatException ex) {
				parserContext.getReaderContext().error("Timeout must be an integer value: [" + timeout + "]", methodEle);
			}
		}
		if (StringUtils.hasText(readOnly)) {
			attribute.setReadOnly(Boolean.valueOf(methodEle.getAttribute(READ_ONLY_ATTRIBUTE)));
		}

		List<RollbackRuleAttribute> rollbackRules = new LinkedList<>();
		if (methodEle.hasAttribute(ROLLBACK_FOR_ATTRIBUTE)) {
			String rollbackForValue = methodEle.getAttribute(ROLLBACK_FOR_ATTRIBUTE);
			addRollbackRuleAttributesTo(rollbackRules,rollbackForValue);
		}
		if (methodEle.hasAttribute(NO_ROLLBACK_FOR_ATTRIBUTE)) {
			String noRollbackForValue = methodEle.getAttribute(NO_ROLLBACK_FOR_ATTRIBUTE);
			addNoRollbackRuleAttributesTo(rollbackRules,noRollbackForValue);
		}
		attribute.setRollbackRules(rollbackRules);

		transactionAttributeMap.put(nameHolder, attribute);
	}

	RootBeanDefinition attributeSourceDefinition = new RootBeanDefinition(NameMatchTransactionAttributeSource.class);
	attributeSourceDefinition.setSource(parserContext.extractSource(attrEle));
	attributeSourceDefinition.getPropertyValues().add("nameMap", transactionAttributeMap);
	return attributeSourceDefinition;
}