用dom4j如何使用Schema的xsd文件验证xml文件的合法性!

import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

 

 private boolean isXMLValid() {
        boolean flag = true;
        try {
            Source schemaFile = new StreamSource(

Thread. currentThread ().getContextClassLoader().getResourceAsStream(

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Java的dom4j根据XSD文件,调整错误节点到正确的位置,需要进行以下步骤: 1. 解析XSD文件,获取元素的层级关系。 ```java SAXReader reader = new SAXReader(); Document xsdDoc = reader.read(new File("schema.xsd")); Element root = xsdDoc.getRootElement(); Map<String, Element> elementMap = new HashMap<>(); getElementMap(elementMap, root); ``` 其中,`getElementMap`方法可以递归获取所有的元素节点,并将其存储在一个`Map`中,方便后续操作。 2. 解析XML文件,获取错误节点。 ```java Document xmlDoc = reader.read(new File("data.xml")); Element errorNode = (Element)xmlDoc.selectSingleNode("//error"); ``` 这里假设错误节点为`error`,可以通过XPath表达式获取该节点。 3. 根据错误节点的路径,获取其应该插入的父节点。 ```java String errorPath = errorNode.getUniquePath(); String parentPath = errorPath.substring(0, errorPath.lastIndexOf("/")); Element parentNode = elementMap.get(parentPath); ``` 这里,通过`getUniquePath`方法获取错误节点的路径,然后根据路径获取其应该插入的父节点。 4. 将错误节点从原位置删除,并插入到正确的位置。 ```java Element errorParent = errorNode.getParent(); errorParent.remove(errorNode); parentNode.add(errorNode); ``` 这里,先从原位置删除错误节点,然后将其插入到正确的位置。 完整代码示例: ```java import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XsdAdjuster { public static void main(String[] args) throws Exception { SAXReader reader = new SAXReader(); Document xsdDoc = reader.read(new File("schema.xsd")); Element root = xsdDoc.getRootElement(); Map<String, Element> elementMap = new HashMap<>(); getElementMap(elementMap, root); Document xmlDoc = reader.read(new File("data.xml")); Element errorNode = (Element)xmlDoc.selectSingleNode("//error"); String errorPath = errorNode.getUniquePath(); String parentPath = errorPath.substring(0, errorPath.lastIndexOf("/")); Element parentNode = elementMap.get(parentPath); Element errorParent = errorNode.getParent(); errorParent.remove(errorNode); parentNode.add(errorNode); System.out.println(xmlDoc.asXML()); } private static void getElementMap(Map<String, Element> elementMap, Element element) { elementMap.put(element.getUniquePath(), element); List<Element> elements = element.elements(); for (Element child : elements) { getElementMap(elementMap, child); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值