我正在使用codesynthesis生成代表我的xsd文件的类。 xml文件已使用在线验证程序针对模式文件进行了验证,似乎没问题。但是,在运行我的程序时,只需读取xml并尝试创建表示xml文件的结构,我就会得到每个元素的异常,例如:error:属性'dburl'没有为元素'quantoptions'声明,错误:找不到声明元素'选项'和错误:没有找到元素'符号'的声明。有人可以告诉你为什么会这样吗?
这是XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Document created with online XML Editor http://xmlgrid.net 2013/09/08 2:17:41 -->
<quantoptions dburl="test attribute">
<option>
<symbol>test string</symbol>
<dateselection enddate="2002-09-24" startdate="2002-09-24"></dateselection>
</option>
<option>
<symbol>test string</symbol>
<dateselection enddate="2002-09-24" startdate="2002-09-24"></dateselection>
<blackscholes>false</blackscholes>
<volatility>true</volatility>
</option>
</quantoptions>
这是xsd文件:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="quantoptions">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="1" name="option">
<xs:complexType>
<xs:sequence maxOccurs="1" minOccurs="1">
<xs:element maxOccurs="1" minOccurs="1" name="symbol" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="dateselection">
<xs:complexType>
<xs:attribute name="enddate" type="xs:date" use="required"/>
<xs:attribute name="startdate" type="xs:date" use="required"/>
</xs:complexType>
</xs:element>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element maxOccurs="1" minOccurs="1" name="blackscholes" type="xs:boolean"/>
<xs:element maxOccurs="1" minOccurs="1" name="volatility" type="xs:boolean"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="dburl" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
最后这里是代码,在这一行抛出异常:std :: auto_ptr optionConfig(quantoptions_(configPath));
const std::string configPath = "../config/quantoptions.xml";
std::auto_ptr<quantoptions> optionConfig (quantoptions_ (configPath));
optionConfig->dburl();
for(quantoptions::option_const_iterator i (optionConfig->option().begin()); i != optionConfig->option().end(); ++i)
{
std::cout<< i->symbol();
}
提前致谢
答案 0 :(得分:0)
最终解决了这个问题,我不确定这是否有记录但是虽然xml形成良好,但代码合成在xml中寻找以下几行:。所以工作的xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Document created with online XML Editor http://xmlgrid.net 2013/09/08 2:17:41 -->
<quantoptions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd" dburl="test attribute">
<option>
<symbol>test string</symbol>
<dateselection enddate="2002-09-24" startdate="2002-09-24"></dateselection>
</option>
<option>
<symbol>test string</symbol>
<dateselection enddate="2002-09-24" startdate="2002-09-24"></dateselection>
<blackscholes>false</blackscholes>
<volatility>true</volatility>
</option>
</quantoptions>