如何在生成的输出文件中生成xsd名称空间前缀?

时间:2013-07-02 21:22:23

标签: c# visual-studio-2008 xsd

我已经讨论过多个专门讨论这个问题的主题和解决方案。没有人工作或我无法理解我做错了什么。

我希望命名空间前缀与生成的xml输出文件中的元素名称一起使用。

我正在使用VS命令提示符中的Visual Studio 2008的XSD命令

这是 Trial.xsd

的xsd架构
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Junk"
       targetNamespace="http://www.opengis.net/kml/2.2"
       xmlns="http://www.opengis.net/kml/2.2"
       xmlns:gx="http://www.google.com/kml/ext/2.2"
       xmlns:kml="http://www.opengis.net/kml/2.2"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       elementFormDefault="qualified">

<xs:import namespace="http://www.google.com/kml/ext/2.2" schemaLocation="TestSchema.xsd" />

<!-- Start LookType -->
<xs:complexType name="LookType">
  <xs:sequence>
    <xs:element ref="gx:TimeSpan" minOccurs="0" />
    <xs:element name="longitude" type="xs:string" />
  </xs:sequence>
</xs:complexType>
<!-- End LookType -->

<xs:element name="Te" type="LookType" />

</xs:schema>

这是 TestSchema.xsd

的xsd架构
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="TestSchema"
targetNamespace="http://www.google.com/kml/ext/2.2"
       xmlns="http://www.google.com/kml/ext/2.2"
       xmlns:gx="http://www.google.com/kml/ext/2.2"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       elementFormDefault="qualified">

<xs:element name="TimeSpan" type="gx:GXTimeSpanType" />

<!-- Start GXTimeSpanType -->
<xs:complexType name="GXTimeSpanType">
  <xs:sequence>
    <xs:element name="begin" type="xs:string" />
    <xs:element name="end" type="xs:string" />
  </xs:sequence>
</xs:complexType>
<!-- End GXTimeSpanType -->

</xs:schema>

我使用Trial.cs

生成结果类文件xsd TestSchema.xsd ./Trial.xsd /c /l:cs /n:T

在程序中,我使用XmlDocumentXmlSerializerFileStream

分配这些垃圾值并将其写入文件
T.LookType te = new T.LookType();
te.longitude = "34.444";
te.TimeSpan = new T.GXTimeSpanType();
te.TimeSpan.begin = "2010-02-26T20:22:00Z";
te.TimeSpan.end = "2010-02-26T20:23:42Z";

我已经排除了使用XmlDocumentXmlSerializerFileStream保存文件的方法,因为它比我要发布的要厚一点,除非这是问题。

这是我在结果文件中得到的结果

<?xml version="1.0" encoding="utf-16"?>
<Te xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.opengis.net/kml/2.2">

  <TimeSpan xmlns="http://www.google.com/kml/ext/2.2">
    <begin>2010-02-26T20:22:00Z</begin>
    <end>2010-02-26T20:23:42Z</end>
  </TimeSpan>
  <longitude>34.444</longitude>
</Te>

这就是我想要的结果文件。请注意gx:TimeSpan元素和xmlns:gx命名空间定义已添加到主Te元素。

<?xml version="1.0" encoding="utf-16"?>
<Te xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
  <gx:TimeSpan>
    <begin>2010-02-26T20:22:00Z</begin>
    <end>2010-02-26T20:23:42Z</end>
  </gx:TimeSpan>
  <longitude>34.444</longitude>
</Te>

1 个答案:

答案 0 :(得分:0)

声明前缀的元素无关紧要,只要它们在使用前声明即可。任何不喜欢这样的代码都会被破坏。

也许是因为无关紧要,XML Schema无法影响声明前缀的元素或使用的前缀。