- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用给定的 XSD 语法文件验证 XML 文件。但现在它总是返回错误,提示 no declaration found for element ...
以及我在 XML 文件中的每个元素或属性。
为了创建 XSD,我使用了 Free online XSD generator如果我在同一站点上使用 (Validator)[http://www.freeformatter.com/xml-validator-xsd.html] 检查该 XSD 中的 xml,一切看起来都很好。
那么为什么 Xerces 会失败?
我使用下面的代码来验证:
XercesDOMParser domParser;
if (domParser.loadGrammar(schemaFilePath.c_str(), Grammar::SchemaGrammarType) == NULL)
{
throw Except("couldn't load schema");
}
ParserErrorHandler parserErrorHandler;
domParser.setErrorHandler(&parserErrorHandler);
domParser.setValidationScheme(XercesDOMParser::Val_Always);
domParser.setDoNamespaces(true);
domParser.setDoSchema(true);
domParser.setValidationSchemaFullChecking(true);
domParser.parse(xmlFilePath.c_str());
if(domParser.getErrorCount() != 0)
{
throw Except("Invalid XML vs. XSD: " + parserErrorHandler.getErrors()); //merge a error coming from my interceptor ....
}
我的 XML 测试文件是:
<?xml version="1.0" encoding="UTF-8" ?>
<schemes signature="9fadde05">
<!-- NOTE: Do not modify this file.
Any modifications will invalidate the signature and result in an invalid file!
This is an example scheme, param_set etc... can be rename / market or / product
-->
<scheme>
<name>test1</name>
<other>test2</other>
</scheme>
<param_set>
<input>
<height min="1060" max="1100" />
<width min="1900" max="1940" />
</input>
</param_set>
</schemes>
我使用的 XSD 是:
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="schemes">
<xs:complexType>
<xs:sequence>
<xs:element name="scheme">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
<xs:element type="xs:string" name="other"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="param_set">
<xs:complexType>
<xs:sequence>
<xs:element name="input">
<xs:complexType>
<xs:sequence>
<xs:element name="height">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:short" name="min"/>
<xs:attribute type="xs:short" name="max"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="width">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:short" name="min"/>
<xs:attribute type="xs:short" name="max"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="signature"/>
</xs:complexType>
</xs:element>
</xs:schema>
最佳答案
我用下面的代码解决了这个问题,我认为 setExternalNoNamespaceSchemaLocation
是诀窍。请注意,我还必须重建一个 absolute
path对于 XSD。
XMLPlatformUtils::Initialize();
{
XercesDOMParser domParser;
bfs::path pXSD = absolute(schemaFilePath);
if (domParser.loadGrammar(pXSD.string().c_str(), Grammar::SchemaGrammarType) == NULL)
{
throw Except("couldn't load schema");
}
ParserErrorHandler parserErrorHandler;
domParser.setErrorHandler(&parserErrorHandler);
domParser.setValidationScheme(XercesDOMParser::Val_Always);
domParser.setDoNamespaces(true);
domParser.setDoSchema(true);
domParser.setValidationSchemaFullChecking(true);
domParser.setExternalNoNamespaceSchemaLocation(pXSD.string().c_str());
domParser.parse(xmlFilePath.c_str());
if(domParser.getErrorCount() != 0)
{
throw Except("Invalid XML vs. XSD: " + parserErrorHandler.getErrors()); //merge a error coming from my interceptor ....
}
}
XMLPlatformUtils::Terminate();
关于c++ - 使用 XSD 的 Xerces XML 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22015661/
我之前在 RapidXml 中询问过一个类似的问题,我现在想知道,相同但使用 Xerces-C。 我正在开发一个需要解析 xml 的 C++ 应用程序。 考虑以下几点: xml文件:file1.xml
我支持使用 Xerces-C 进行 XML 解析的遗留 C++ 应用程序。我被 .Net 宠坏了,习惯了使用 XPath 从 DOM 树中选择节点。 有什么方法可以访问 Xerces-C 中一些有限的
我必须将我的项目从 xerces 1 迁移到 xerces 3.1.1,但我找不到 DOMString.hpp。有人知道我在哪里可以找到这门课吗? 最佳答案 DOMString 是 gone在 Xer
我正在使用 JSF 2.0、NetBeans 6.9.1、GlassFish Server 3.1、mojarra 2.0.3 和 JasperReports 3.7.6 开发 Web 应用程序。我的
我在gradle项目中使用Xerces jar,然后在gradle插件中使用该项目的jar:实际上,我正在开发一个gradle插件,其中包含使用gradle项目jar的某些功能的自定义任务;当我尝试运
我收到错误 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xerces/util/XMLChar
我在 there 中提到过类似的问题.我正在使用 mvn clean compile site 命令,我的版本是: cobertura.version: 2.5.1 findbugs.version:
我正在 Eclipse 中开发 GWT 应用程序并使用 jdom2 读取一些自定义 xml 属性文件。 在最近的更新之后,我的应用程序现在在尝试读取 xml 文件时失败并出现上述错误。相关堆栈跟踪是:
我安装了 Android Studio 1.5.1 并测试了默认的“Hello World”应用程序,该应用程序完美构建并在我的手机上运行。但是,我尝试对 CardEmulation 执行相同的操作代
这个问题在这里已经有了答案: Xerces error: org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl (2 个答案) 关闭 5 年前。 我正在使用
我有一个 Sax 解析器类,用于 Swing 应用程序和部署到 GlassFish 的 Web 项目。 该类解析 xml 文件。它在 Netbeans IDE Swing 应用程序(在 IDE 中)和
我有一个 XSD 文件: ... 在 Java 代码中: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); db
我已经在 linux 上下载并构建了 Xerces-c: Linux xxxx 2.6.24.7-server-3mnb #1 SMP Wed Sep 9 16:34:18 EDT 2009 x86_
我按照 build xerces in linux 的说明进行操作 。/配置 制作 进行安装 但我正在尝试运行来自 Programming Guide 的第一个示例 #include // Othe
我有一个基于 XSD 的 XML,看起来像这样: abc def 我使用的是 C++,我可以成功读取 XML 并对其进行解析。但是我想使用不带命名空间的标签名称获取我的元素,例如
我正在尝试在 Mac 上运行 Xerces。我我们 ./configure CFLAGS="-arch x86_64" CXXFLAGS="-arch x86_64" ./configure --p
有谁知道是否有一个与 Python2.6 兼容的可用 python 库,可以公开 Xerces 功能及其 XML DOM 功能? 我将所需的功能定义为:通过 Xpath 和 XSLT 处理器选择 XM
我想使用 Xerces 从字符串加载 XML 模式,但直到现在,我只能从 URI 加载它: final XMLSchemaLoader xsLoader = new XMLSchemaLoader()
我的问题是: 如果我有以下 XML: 1 然后我将添加以下路径: 2 结果 1 2 我希望能够将它转换成这样:
我需要从自己的流中读取数据,并在到达时使用Xerces / C++(SAX或SAX2)对其进行解析。我已经看到Xerces Java FAQ了,但是Java和C++ API似乎并不匹配。至少,我在C+
我是一名优秀的程序员,十分优秀!