C#DataSet使用命名空间保存XML问题

时间:2018-08-20 17:42:16

标签: c# xml xsd dataset

我正在使用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=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;MySchema.xsd&quot;">
  <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>

0 个答案:

没有答案