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



我已经讨论了多个专门讨论这个问题的主题和解决方案。没有一个奏效,或者我不明白我做错了什么。

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

我正在从VS命令提示符将XSD命令与Visual Studio 2008一起使用

这是我的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>

我正在使用xsd TestSchema.xsd ./Trial.xsd /c /l:cs /n:T 生成生成的类文件Trial.cs

在一个程序中,我分配这些垃圾值,并使用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>

前缀在哪个元素上声明并不重要,只要它们是在使用之前声明的。任何不喜欢这样的代码都会被破坏。

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

最新更新