我已经解析了一个XML文件,并得到了一个我感兴趣的节点.我现在如何在源XML文件中找到此节点出现的行号?
编辑:目前我正在使用SAXParser来解析我的XML.但是我会对使用任何解析器的解决方案感到满意.
与Node一起,我也有节点的XPath表达式.
我需要获取行号,因为我在文本框中显示XML文件,并需要突出显示节点出现的行.假设XML文件的格式很好,并且有足够的换行符.
我有一些带有JAXB注释的类,我创建了一些实例,我需要根据我的XSD文件验证它们.当对象无效时,我应该能够获得有关错误的详细信息.
到目前为止,我还没有运气,我知道这个类ValidationEventHandler,但显然我可以将它与Unmarshaller类一起使用,问题是我必须验证对象而不是原始XML.
我有这个代码:
MyClass myObject = new MyClass();
JAXBContext jaxbContext = JAXBContext.newInstance("x.y.z");
JAXBSource jaxbSource = new JAXBSource(jaxbContext, myObject);
SchemaFactory factory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Source schemaFile = new StreamSource(getClass().getClassLoader()
.getResourceAsStream("mySchema.xsd"));
Schema schema = factory.newSchema(schemaFile);
Validator validator = schema.newValidator();
validator.validate(jaxbSource);
Run Code Online (Sandbox Code Playgroud)
这段代码可以工作,它将验证对象并在消息中引发异常,如下所示:
cvc-pattern-valid:对于类型为'id'的模式'\ d {10}',值'12345678901'不是facet-valid.
问题是我需要特定的细节,使用类似于我必须解析所有消息的字符串.