有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用jaxb解组时xinclude的java行号

我在SO上找到了这个问题。我展示了如何在使用JAXB解组时获取单个xml元素的行号。我扩展了这个示例,以便能够使用xinclude。不幸的是,我无法获得xinclude的行号

那么,如何获得实际的xinclude语句的行号呢?以下是扩展示例:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.sax.SAXSource;

import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

public class Demo {
    public static void main(String[] args) throws JAXBException, SAXException,
            ParserConfigurationException, FileNotFoundException {
        JAXBContext jc = JAXBContext.newInstance(Person.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        SAXParserFactory spf = SAXParserFactory.newInstance();
        spf.setXIncludeAware(true);
        spf.setNamespaceAware(true);
        spf.setValidating(true);

        File file = new File("src/person.xml");
        XMLReader xr = spf.newSAXParser().getXMLReader();
        xr.setEntityResolver(new EntityResolver() {
            @Override
            public InputSource resolveEntity(String publicId, String systemId)
                    throws SAXException, IOException {
                System.out.println(publicId + " -> " + systemId);
                return null;
            }
        });
        SAXSource source = new SAXSource(xr, new InputSource(
                new FileInputStream(file)));
        Person person = (Person) unmarshaller.unmarshal(source);

        System.out.println("Person:  " + person.locator.getLineNumber());
        System.out.println("Address:  "
                + person.address.locator.getLineNumber());
    }
}

EntityResolver侦听器告诉我有一个xinclude语句,但我不知道在哪个行号上

人。xml

<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xi="http://www.w3.org/2001/XInclude">
    <name>Jane Doe</name>
    <xi:include href="./src/address.xml" />
</person>

地址。xml

<?xml version="1.0" encoding="UTF-8"?>
<address>1 A Street</address>

我没有提到PersonAddress类,所以这个问题很简短:)我还用@XmlTransient标记了每个Locator字段。谢谢大家!


共 (0) 个答案