我尝试用Delphi语言中的XMLMapper导入一些有效的模式(对于xmlspy和oxygen),但是我得到了这个错误
"Error Flux if:InfofileType未知“。
我使用命名空间,这个类型是在另一个文件中定义的。
有没有办法解决这个问题?
(我也尝试了Delphi 2010演示,但仍然不起作用)
<?xml version="1.0" encoding="UTF-8" ?>
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:if="http://www.gtest.fr/Apps/InfoFile" xmlns:ca="http://www.gtest.fr/Apps/CommandAnswer" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:import namespace="http://www.gtest.fr/Apps/InfoFile" schemaLocation="InfoFile.xsd" />
<xs:import namespace="http://www.gtest.fr/Apps/CommandAnswer" schemaLocation="CommandAnswer.xsd" />
- <xs:element name="ServerAnswer">
- <xs:annotation>
<xs:documentation>Reponse serveur socket</xs:documentation>
</xs:annotation>
- <xs:complexType>
- <xs:sequence>
<xs:element name="InfoFile" type="if:InfoFileType" />
<xs:element name="Command" type="ca:CommandAnswerType" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>在QC中报告:http://qc.embarcadero.com/wc/qcmain.aspx?d=80124
发布于 2009-12-04 10:46:06
我仍然会尝试使用Delphi2010(试用版),看看它是否能在那里工作。
我知道在D2009和D2010中已经做了大量的工作。它在处理导入和包含方面是出了名的差。
现在好多了。
如果您不能解决这个问题,我建议您手动编辑模式,删除include/import,并在没有外部文件的情况下构建一个大的XSD。它应该工作得更好。
这就是我处理一组相当复杂的模式的方法,即使是.Net库也会对此感到头疼。
更新文件:您是否可以尝试用另一个符号替换if : in ,以避免与if保留字的任何冲突;例如,在模式中搜索'n‘replace if为_if_或其他任何内容...XML映射器应该处理这个问题,但是,您知道...
发布于 2010-01-19 06:56:54
Eric Thorniley终于给了我去here的路。
似乎XML不能正确理解名称空间。但是,您可以通过在导入的文件中添加额外的名称空间定义来引导它。我敢肯定,这是不对的。
例如,在Insurance.xsd中将xmlns:Utils=声明为“http://www.gtest.fr/Apps/Utils”
如果您将完全相同的定义添加到Utils.xsd中,XML Mapper就会正确地导入它(我认为!)
XML很有可能会删除我的修改--企业架构师当然会完全忽略它们。
发布于 2014-01-06 22:25:52
我想看看Eric Thorniley向你们指出的信息,但它已经不在那里了。如果我有消息的主题,我也许能在某个地方的档案中找到它。我试着在谷歌上搜索,但我发现在不同的网站上都有这篇文章的副本。
谢谢
https://stackoverflow.com/questions/1842420
复制相似问题