2011-07-17 28 views
2

我無法使用xstream從XML中找到模式位置。使用Xstream解析模式位置的XML

<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」,但我希望這只是一個臨時的解決方案。

回答

3

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 + "'}"; 
    } 
} 
+0

+ 1,簡單的解決方案,謝謝 – bbaja42