Я полагаю, это то, что вы хотите;код предназначен для иллюстрации, а не для учета хороших практик программирования.Это было проверено с вашим XML.Основное предположение состоит в том, что элемент документа имеет два элемента: первый - XSD, второй - XML для проверки.
Если, например, вы измените 44,95 на d44,95, вы получите такой вывод:
XML недопустим, поскольку cvc-datatype-valid.1.2.1: «d44.95» не является допустимым значением для «float».
В противном случае все идет хорошои программа печатает XML действителен.
import java.io.*;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.validation.*;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import javax.xml.xpath.*;
import org.xml.sax.InputSource;
public class TestValidation {
public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException, XPathExpressionException {
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList)xpath.evaluate("/*/*", new InputSource("XmlWithEmbeddedXsd.xml"), XPathConstants.NODESET);
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
Validator validator = factory.newSchema(new DOMSource(nodes.item(0))).newValidator();
try {
validator.validate(new DOMSource(nodes.item(1)));
System.out.println("XML is valid.");
}
catch (SAXException ex) {
System.out.println("XML is not valid because " + ex.getMessage());
}
}
}