我想针对XSD架构验证XML文件。XML文件根元素没有任何名称空间或xsi详细信息。它没有属性,只是<root>
。
我已经尝试从http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.html尝试以下代码,但运气不佳
cvc-elt.1: Cannot find the declaration of element 'root'
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
File schemaFile = new File("schema.xsd");
Schema xsdScheme = factory.newSchema(schemaFile);
Validator validator = xsdScheme.newValidator();
Source source = new StreamSource(xmlfile);
validator.validate(source);
xml可以使用包含的名称空间标头等(通过xmlspy添加)很好地验证,但是我想可以不用手动编辑源文件就可以声明xml名称空间了吗?
编辑和解决方案:
public static void validateAgainstXSD(File file) {
try {
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
File schemaFile = new File("path/to/xsd");
Schema xsdScheme = factory.newSchema(schemaFile);
Validator validator = xsdScheme.newValidator();
SAXSource source = new SAXSource(
new NamespaceFilter(XMLReaderFactory.createXMLReader()),
new InputSource(new FileInputStream(file)));
validator.validate(source,null);
} catch (Exception e) {
e.printStackTrace();
}
}
protected static class NamespaceFilter extends XMLFilterImpl {
String requiredNamespace = "namespace";
public NamespaceFilter(XMLReader parent) {
super(parent);
}
@Override
public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {
if(!arg0.equals(requiredNamespace))
arg0 = requiredNamespace;
super.startElement(arg0, arg1, arg2, arg3);
}
}
您需要解决两个独立的问题:
xsi:schemaLocation
在文件中放置一个属性,以提示 (!) 模式在哪里。您可以放心地跳过第二部分,因为该位置实际上只是一个提示。您不能跳过第一部分。XML文件中声明的名称空间与模式匹配。重要的是:
<xml> ... </xml>
是 不一样的 ,因为这:
<xml xmlns="urn:foo"> ... </xml>
因此,您需要在XML文档中声明您的名称空间,否则它将与您的模式不对应,并且会出现此错误。
我是XML新手。这是一个家庭作业。我已经尽了最大努力,但我无法让实例文档进行验证。我总是犯错误 “找不到元素'站点'的声明。 我想我可能错误地声明了一些名称空间或者schemaLocations。有人能给我指一下正确的方向吗? 作业步骤: > <块引用> 在sites.xml文件中,向根站点元素添加命名空间声明,将xs前缀与XML Schema命名空间的URI相关联。为文件指定默认命名空间http
为什么我得到一个空的输出?当我删除xml中的xmlns部分时,输出是预期的,但是intellisense不再工作了。 仓库xml 仓库xsl
问题内容: 我想使用JDOM读取XML文件,然后使用XPath从JDOM Document中提取数据。它可以很好地创建Document对象,但是当我使用XPath在Document中查询元素列表时,我什么也没得到。 我的XML文档在根元素中定义了一个默认名称空间。有趣的是,当我删除默认名称空间时,它成功运行了XPath查询并返回了我想要的元素。要使XPath查询返回结果,我还必须做什么? XML:
问题内容: 我正在一个没有架构的项目中,我必须手动解析xml响应。我的问题是我无法使用xml注释获得一些价值。 例如,xml类似于: Java类是: 我可以获取操作和响应,但不能在responsedata中获取数字,有人可以告诉我如何处理using注释吗?太感谢了! 另一个问题是:我的响应数据中有多个…。如何获取Java代码中的所有值。 ->我解决了多个相同的标签,只需设置List,注释将自动生成
我有一个来自外部endpoint的巨大XML响应。我想解析java类的XML响应。如果没有一个XML有名称空间,我就能够解析成相应的POJOS,直到那时一切都很好。 但是,响应可能仅在根元素中包含命名空间。例如,像这样 我可以保证没有一个内部xml元素会有更多的命名空间。 有没有办法实现这一点?我看到一些完全忽略命名空间的答案,但感觉不是很有说服力。有没有办法正确解析这些。 这是我为XML响应建模
我正在尝试选择一个特定的