Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根级别的数据无效。第1行,有效内存xml上的位置1_C#_Xml_Xmltextreader_Ogc - Fatal编程技术网

C# 根级别的数据无效。第1行,有效内存xml上的位置1

C# 根级别的数据无效。第1行,有效内存xml上的位置1,c#,xml,xmltextreader,ogc,C#,Xml,Xmltextreader,Ogc,我的内存中有一个从OGC投诉web功能服务下载的非常有效的XMl字符串。 当我使用以下代码创建am XmlTextReader以解析到我的解析器时 using (var sr = new StringReader(schemaString)) { using (var reader = new XmlTextReader(sr)) { try {

我的内存中有一个从OGC投诉web功能服务下载的非常有效的XMl字符串。
当我使用以下代码创建am XmlTextReader以解析到我的解析器时

        using (var sr = new StringReader(schemaString))
        {
            using (var reader = new XmlTextReader(sr))
            {
                try
                {
                    schema = new GML2Parser().GetClassDefinition(reader, schema);
                }
                catch (Exception ex)
                {
                    error = ex.Message;
                }
            }
        }
我得到一个异常,指示rool级别的数据无效。如果我将这个字符串保存到本地文件,比如feature_desc.xsd,使用file.ReadAllText并调用前面提到的例程,我会遇到类似的问题

但是,如果我使用XmlReader.Create(feature_desc.xsd),我的解析器在开始遍历XML节点时不会抛出异常。这是一种总结这些行动的方法

 private void ParseFeatureDescription(DataTableInfo schema, string featureDescription, string featureFileName, string featureName)
        {
            var schemaLocation = string.Empty;
            if (featureFileName != null)
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(featureDescription);
                schemaLocation = infrut.Utilities.CreateTempFilePath(featureFileName, FileExtension.xsd, false);
                doc.Save(schemaLocation);
            }

            var error = DeserializeTableSchema(schema, featureDescription, featureName);
            if (!string.IsNullOrEmpty(error))
            {
                var fromFileFeatureDesc = File.ReadAllText(schemaLocation);
                if (featureDescription == fromFileFeatureDesc){}
                error = DeserializeTableSchema(schema, fromFileFeatureDesc, featureName);

                if (!string.IsNullOrEmpty(error))
                {
                    // last resort
                    var reader = XmlReader.Create(schemaLocation);
                    schema = new GML2Parser().GetClassDefinition(reader, schema);
                    if (schema.Columns.Count == 0)
                    {
                        // trouble
                        ActionResponse.LogError("Error parsing description of " + featureName + ". Inner exception is \r\n" + error
                            + " " + " for content \r\n" + fromFileFeatureDesc, "WFS Worker");
                    }
                }
            }
        }
字符串在内存中的表示形式为:

"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:ems=\"http://www.emssatcom.com\" xmlns:gml=\"http://www.opengis.net/gml\" elementFormDefault=\"qualified\" targetNamespace=\"http://www.emssatcom.com\">\r\n  <xsd:import namespace=\"http://www.opengis.net/gml\" schemaLocation=\"http://10.25.131.62:8091/geoserver/schemas/gml/2.1.2/feature.xsd\" />\r\n  <xsd:complexType name=\"asmcc_srr_viewType\">\r\n    <xsd:complexContent>\r\n      <xsd:extension base=\"gml:AbstractFeatureType\">\r\n        <xsd:sequence>\r\n          <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"gid\" nillable=\"true\" type=\"xsd:int\" />\r\n          <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"srr_name\" nillable=\"true\" type=\"xsd:string\" />\r\n          <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"the_geom\" nillable=\"true\" type=\"gml:PolygonPropertyType\" />\r\n        </xsd:sequence>\r\n      </xsd:extension>\r\n    </xsd:complexContent>\r\n  </xsd:complexType>\r\n  <xsd:element name=\"asmcc_srr_view\" substitutionGroup=\"gml:_Feature\" type=\"ems:asmcc_srr_viewType\" />\r\n</xsd:schema>"
“\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n”
持久化文件是:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ems="http://www.emssatcom.com" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" targetNamespace="http://www.emssatcom.com">
  <xsd:import namespace="http://www.opengis.net/gml" schemaLocation="http://10.25.131.62:8091/geoserver/schemas/gml/2.1.2/feature.xsd" />
  <xsd:complexType name="asmcc_srr_viewType">
    <xsd:complexContent>
      <xsd:extension base="gml:AbstractFeatureType">
        <xsd:sequence>
          <xsd:element maxOccurs="1" minOccurs="0" name="gid" nillable="true" type="xsd:int" />
          <xsd:element maxOccurs="1" minOccurs="0" name="srr_name" nillable="true" type="xsd:string" />
          <xsd:element maxOccurs="1" minOccurs="0" name="the_geom" nillable="true" type="gml:PolygonPropertyType" />
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="asmcc_srr_view" substitutionGroup="gml:_Feature" type="ems:asmcc_srr_viewType" />
</xsd:schema>


有人遇到过这种情况吗?

这里是胡乱猜测:有时我会在不同的应用程序中遇到这种错误(第1行第1列),因为它们存储在UTF-8编码中,并且在文本/文件的最开头有字节顺序标记。


尝试将文件读取为ANSI字符串,而不是unicode,仅供参考,您不应使用
new-XmlTextReader()
new-XmlTextWriter()
。自.NET 2.0以来,它们一直被弃用。使用
XmlReader.Create()
XmlWriter.Create()
。此外,如果您想知道发生了什么,请不要只显示
ex.Message
。始终使用
ex.ToString()
,它将向您展示所有内容。@JohnSaunders,谢谢您的提示。