1

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

我希望命名空间前缀伴随生成的 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>

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

在一个程序中,我分配这些垃圾值并将它们写入文件使用XmlDocument,XmlSerializerFileStream

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";

我已经排除了使用 保存文件的方法XmlDocument,因为它有点厚XmlSerializerFileStream所以我想发布,除非这是问题的一部分。

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

<?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:gxTe

<?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>
4

1 回答 1

0

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

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

于 2013-07-02T22:12:28.580 回答