Разбор XML для расположения схемы с Xstream - PullRequest
2 голосов
/ 17 июля 2011

У меня проблемы с поиском местоположения схемы из XML с помощью xstream .

<order xmlns="http://www.mycompany.com/xml/myproject"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="test.xsd">

Для проверки XML со схемой я используюjavax:

Validator validator = schema.newValidator();
validator.validate(source);

Пока я жестко закодировал имя схемы как «test.xsd», но я надеюсь, что это временное исправление.

1 Ответ

3 голосов
/ 20 июля 2011

XStream по умолчанию не поддерживает пространство имен, хотя я думаю, что вы можете включить это. Вы должны быть в состоянии найти детали на сайте. Чтобы просто получить доступ к пространству имен, вы можете обработать его как любой другой атрибут:

public static void main(String[] args) {
    String xml = "<x:foo xmlns:x=\"http://foo.com\">" +
                         "<bar xmlns=\"http://bar.com\"/>" +
                         "</x:foo>";
    XStream xstream = new XStream();
    xstream.alias("x:foo", Foo.class);
    xstream.useAttributeFor(Foo.class, "xmlns");
    xstream.aliasField("xmlns:x", Foo.class, "xmlns");
    xstream.alias("bar", Bar.class);
    xstream.useAttributeFor(Bar.class, "xmlns");
    xstream.aliasField("xmlns", Foo.class, "xmlns");
    Object o = xstream.fromXML(xml);
    System.out.println("Unmarshalled a " + o.getClass());
    System.out.println("Value: " + o);
}

static class Foo {
    private String xmlns;
    private Bar bar;
    public String toString() {
        return "Foo{xmlns='" + xmlns + "', bar=" + bar + '}';
    }
}

static class Bar {
    private String xmlns;
    public String toString() {
        return "Bar{xmlns='" + xmlns + "'}";
    }
}
...