我正在使用DataSet读取XML文件和XSD架构,但是当我保存时 来自DataSet.WriteXML()的XML文件,以前的命名空间信息消失了。
DataSet ds = new DataSet();
ds.ReadXmlSchema("MySchema.xsd");
ds.ReadXml("MyParams.xml");
这是我的原始XML:
<?xml version="1.0" encoding="UTF-8"?>
<MyParams xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MySchema.xsd">
当我使用WriteXML()时,我得到了:
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<MyParams>
我已经这样更改了DataSet的命名空间:
ds.Namespace = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"MySchema.xsd\"";
结果更好但不正确:
<?xml version="1.0" standalone="yes"?>
<NewDataSet xmlns="xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MySchema.xsd"">
<MyParams>
我在初始化数据集时也尝试过此操作
DataSet ds = new DataSet("MyParams");
但是输出是相同的-我仍然有两个问题:
1)命名空间仍为“ NewDataSet”,并且应为“ MyParams”,并且 已被添加为上面的另一个级别,而不是替换它。 同样,我需要保留“ encoding =“ UTF-8”部分。
2)我在不应该将双引号 (我还有另一个问题要解决。)
如何解决名称空间问题?
下面是我的示例XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="MyParams">
<xs:complexType>
<xs:sequence>
<xs:element ref="FirstFolder"/>
<xs:element ref="SecondFolder"/>
<xs:element ref="Window"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="FirstFolder" type="xs:string"/>
<xs:attribute name="InUse">
<xs:simpleType>
<xs:restriction base="xs:boolean">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:element name="Window">
<xs:complexType>
<xs:sequence>
<xs:element ref="Width"/>
<xs:element ref="Height"/>
<xs:element ref="Left"/>
<xs:element ref="Top"/>
</xs:sequence>
<xs:attribute ref="InUse" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Width">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="305"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Height">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="242"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Top">
<xs:simpleType>
<xs:restriction base="xs:integer"/>
</xs:simpleType>
</xs:element>
<xs:element name="Left">
<xs:simpleType>
<xs:restriction base="xs:integer"/>
</xs:simpleType>
</xs:element>
<xs:element name="SecondFolder"/>
</xs:schema>
这是一个示例XML:
<?xml version="1.0" encoding="UTF-8"?>
<MyParams xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Schemas\MyParams.xsd">
<FirstFolder>C:\TestFolderOne</FirstFolder>
<SecondFolder>C:\TestFolderTwo</SecondFolder>
<Window InUse="true">
<Width>400</Width>
<Height>400</Height>
<Left>100</Left>
<Top>100</Top>
</Window>
</MyParams>