C# xml字符串值(如exponential)变为float
我不同意将“111e1”这样的xml值作为字符串类型读取。我正在尝试使用标准C#XmlReader从xml创建xsd模式,如下所示:C# xml字符串值(如exponential)变为float,c#,xml,schema,C#,Xml,Schema,我不同意将“111e1”这样的xml值作为字符串类型读取。我正在尝试使用标准C#XmlReader从xml创建xsd模式,如下所示: ` XmlReaderSettings readerSettings = new XmlReaderSettings(); readerSettings.XmlResolver = null; using (XmlReader reader = XmlReader.Create(sourcexmlpath, readerSet
`
XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.XmlResolver = null;
using (XmlReader reader = XmlReader.Create(sourcexmlpath, readerSettings))
{
XmlSchemaSet schemaSet = new XmlSchemaSet();
XmlSchemaInference schema = new XmlSchemaInference();
schemaSet = schema.InferSchema(reader);
using (TextWriter writer = File.CreateText(xsdpath))
{
foreach (XmlSchema s in schemaSet.Schemas())
{
s.Write(writer);
}
writer.Close();
}
reader.Close();
}
`
源xml文件:
`<?xml version="1.0" encoding="utf-8"?>
<Document>
<example>
<testvalue>34551E10</testvalue>
</example>
</Document>
`
`
34551E10
`
我得到了浮子类型:
`<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Document">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="example">
<xs:complexType>
<xs:sequence>
<xs:element name="testvalue" type="xs:float" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>`
`
`
如果值由数字组成,并且它们之间只有“e”字母,则存在问题(其他字母的问题消失),例如:
1E11111E1111E1
但是如果字母的开头和结尾像E111111111E,我们就没有这个问题了
如何防止将值读取为浮点类型?有可能吗?在我看来,在不需要读取时验证XML。如果在写入时验证了XML,则在读取时无需执行架构检查。使用XML时,如果未读取完整文件,则会由于缺少结束标记而发生错误。因此,在您的情况下,如果您在没有进行模式检查的情况下读取文件,您不会遇到问题。@jdweng,但这就是全部要点吗?“我正在尝试从xml创建xsd模式”。您会问以下问题:“如何防止将值读取为浮点类型?可能吗?”我的回答是在读取c#代码时不检查模式。您正在使用:XmlSchemaSet schemaSet=new XmlSchemaSet();因此,验证应该通过的模式。然后读取不带模式的Xml作为字符串,这样浮点数就不会改变。