gpt4 book ai didi

java - 没有命名空间的 XML。针对多个 XSD 之一进行验证

转载 作者:数据小太阳 更新时间:2023-10-29 02:08:07 26 4
gpt4 key购买 nike

我经常收到一堆 XML 文件。我们无法控制它们,它们也没有 namespace 信息,我们真的很想避免更改它们。

我们有一个 XSD,我们需要使用它来验证 XML 文件,如果明确编码以应用它,它就可以工作。现在我们想向 SAX 解析器提示应该针对这个 XSD(我们在文件系统上有)验证这个特定的 XML 方言,但是除了在 XML 文件中提供我们真正想要的 noNamespaceSchemaLocation 之外我找不到任何其他方法喜欢避免。

建议? EntityResolver 是否总是使用 null/空命名空间调用?

(一个功能性的解决方案会在我被允许的情况下给予 500 个奖励积分)

最佳答案

使用 java.xml.validation 您可以指定 XSD 架构,该架构应用于验证 XML 文档而不被文档引用:

import javax.xml.XMLConstants;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

...
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(new File("<path to the xsd>"));

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setValidating(false);
spf.setSchema(schema);

XMLReader xmlReader = spf.newSAXParser().getXMLReader();
xmlReader.setContentHandler(...);
xmlReader.parse(new InputSource(...)); // will validate against the schema

请注意,setValidating() 仅表示关闭 DTD validation作为defined by the W3C .该调用严格来说不是必需的,因为默认值为 false。

关于java - 没有命名空间的 XML。针对多个 XSD 之一进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com