- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我无法理解为什么 C# 代码生成器(xsd、xsd2code)生成的输出类 Profile 具有两个标记为不同属性的相同类型的属性。其中一个被标记为不合格,另一个则不是。
我的 XSD 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.acme.com" xmlns="http://www.acme.com" elementFormDefault="unqualified">
<xsd:complexType name="ParameterList">
<xsd:sequence>
<xsd:element ref="Parameter" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ParameterItem">
<xsd:sequence>
<xsd:element name="Name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="Value" type="xsd:string" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="Parameters" type="ParameterList" />
<xsd:element name="Parameter" type="ParameterItem" />
<xsd:element name="Profile">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Parameters" minOccurs="1" maxOccurs="1"/>
<xsd:element name="Parameters" type="ParameterList" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
以及xsd2code生成的输出代码:
using System.Collections.Generic;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace SO2_installation
{
public class ParameterList
{
public ParameterList()
{
Parameter = new List<ParameterItem>();
}
public List<ParameterItem> Parameter { get; set; }
}
public class ParameterItem
{
public string Name { get; set; }
public string Value { get; set; }
}
public class Profile
{
public Profile()
{
Parameters1 = new List<ParameterItem>();
Parameters = new List<ParameterItem>();
}
[XmlArray(Order = 0)]
[XmlArrayItem("Parameter", IsNullable = false)]
public List<ParameterItem> Parameters { get; set; }
[XmlArray("Parameters", Form = XmlSchemaForm.Unqualified, Order = 1)]
[XmlArrayItem("Parameter", IsNullable = false)]
public List<ParameterItem> Parameters1 { get; set; }
}
}
代码已被 R# 简化,因此它不是 xsd2code 的准确输出,但它显示了困扰我的问题 - 为什么两个属性没有标记相同的属性?
这是在准备与 XSD 对应的 XML 文件时出现的问题。它应该看起来像下面这个,这使得准备工作很容易出错。
<?xml version="1.0" encoding="utf-8"?>
<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Parameters xmlns="http://www.acme.com">
<Parameter xmlns="http://www.acme.com">
<Name xmlns="">SERIALNUMBER</Name>
<Value xmlns="">600001</Value>
</Parameter>
</Parameters>
<Parameters1 xmlns="">
<Parameter xmlns="http://www.acme.com">
<Name xmlns="">SERIALNUMBER</Name>
<Value xmlns="">600002</Value>
</Parameter>
</Parameters1>
</Profile>
问题的答案:“为什么相同类型的两个属性,基于相同的 xsd 标记有不同的属性”不是我主要关心的问题。由于我无法更改 XSD 文件(它们很久以前就已发送给客户端),因此我需要找到一种方法来使用 XML 文件,而不管它们的元素是否标有 namespace 。目前,当我传递 XML 时,例如:
<Parameters1 xmlns="http://www.acme.com">
XmlSerializer 将返回解析错误。发送所有参数都标有 namespace 或不带 namespace 的 XML 会很好——只要它们被一致地标记就没关系。
预先感谢您帮助我解决这个问题。
附加说明:该示例是为了简化附加代码而准备的,所以请不要在意 Profile 由两个相同类型的属性组成。
最佳答案
产生两个属性的原因是:
elementFormDefault="unqualified">
这意味着不应限定 XML 中的所有 LOCAL 元素 - 应使用空命名空间 xmlns=""进行限定。换句话说,在给定的代码片段中:
<xsd:element name="Profile">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Parameters" minOccurs="1" maxOccurs="1"/>
<xsd:element name="Parameters" type="ParameterList" minOccurs="1"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
第一个元素参数是对 GLOBAL 类型的引用,在 XML 中应该使用目标命名空间进行限定。为什么?因为无论属性 elementFormDefault 的值是多少,所有全局元素都应使用目标命名空间进行限定。
第二个元素是新 Parameters 元素的本地定义,由于 XML 中的 elementFormDefault="unqualified"将使用此 xsd 进行验证,因此有两个强制性元素 Parameteres,使用不同的命名空间进行限定。
要完整回答您的问题 - 如果不更改或覆盖您的 xsd 中的定义,我看不到解决方案。如果原始 xsd 中的 Paramters 元素具有属性 minOccurs="0",则可以省略它们。也许重新定义也是您的业务案例 ( https://www.w3schools.com/xml/el_redefine.asp ) 的一个选项。
关于从 XSD 生成的 C# 类包含标有不同限定属性的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44964018/
richfaces如何避免显示丰富 TreeMap 标?我想过滤树,如果一个父亲被填充,他将不会显示,但他的 child 会显示,所以我需要从默认图标更改为无图标。 其中项目代表树节点 最佳答案 组
我的 iPad 屏幕上随机出现多个标签。重要的是它们都完全可见。因此,我使用下面的最后 4 行 Position 标签代码 来尝试确保标签的位置完全在屏幕框架内。然而,即使我在这一行中将 100 替换
我想在我的表格原型(prototype)单元格中声明 4 个标签,以便我可以将 Parse 中的所有数据检索到标签中。正如你在图片中看到的,有 4 个标签,我希望每个标签都有自己的 socket ,但
标 checkout 现又消失?
这个问题在这里已经有了答案: How to prevent buttons from submitting forms (20 个答案) 关闭 4 年前。 我有一个非常简单的程序,它使用 JS 将结
我刚刚编写了一个程序,其中有一个包含 JLabel 组件数组的 JFrame。该数组获取由 for 循环分配的单个标签的位置: for(int i=0; i
我不确定这个问题是否已在本网站的其他地方得到解答,但我很难用语言解释我的问题。这里是:我想做的是按用户选择的标签对crawler_results 中的文章进行排序。因此,文章中出现的标签越多(coun
尽管数据点不重复,但图表上的标 checkout 现了两次。 知道如何解决吗? 这是标签 json: labels: { rotation: -45, formatter: funct
我正在尝试使用 css 在屏幕上呈现 SVG。这是我的文件结构。 Root > Assets > Icon > user-icon.svg。所以,我正在尝试使用 CSS 来添加它: .user-ele
我正在向客户端应用程序发送一条消息 MarketDataSnapshotFullRefresh,但我在 toAdmin 方法中收到“标 checkout 现不止一次”。我得到的原始消息字符串是 8=F
在AndroidManifest.xml中,application标签有: android:label="@string/app_name" 并且 res/values/strings.xml 中的
有人尝试使用react-native-icons吗?我遵循以下步骤: npm install react-native-icons @ latest-保存 在XCode中,在项目导航器中,右键单击Li
在此页面中:enter link description here 没有任何在此表下的 HTML 中: Attribute Value Description ... 但是当我在 Google
我使用 Vaadin 7。我尝试使用以下代码更改组件的图标: Tree tree = new Tree("The Planets and Major Moons"); tree.setIcon(new
我已阅读以下内容 article .我正在尝试使用 BHO 扩展嵌入图标。但是,res://协议(protocol)在 HTTPS 站点中不起作用。在 HTTPS 站点中显示本地镜像是否有解决方法或替
我正在使用以下 HTML 代码: hr { border: none; border-top: 3px double #333; color: #333; overflow: visi
我无法弄清楚 背后的复杂逻辑元素实际上被放置。我想要一个有两行的表格。我想要每一行的标签,然后是一个输入框。我想要响应行为,当视口(viewport)变窄时,标 checkout 现在输入的正上方。
我有一个严重的问题 :( 我正在制作一个个人资料页面,我的 DIV 总是可点击的(这不应该发生),当我在 chrome 上检查它的元素时,它显示了所有 DIVS 上的一堆......我做到了不在这里写
我有一个以前没有遇到过的问题,我希望能得到一些相关信息。我有一个导航栏显示在网页的顶部,由于某种原因,当代码运行时,浏览器添加了一些 a>/a> 标签,这导致我的链接有一些...处置本身。我希望找出如
我正在使用 Fix 4.3 并遇到两个问题,如果我能解决一个问题,那么应该会消除第二个问题。 但是...我正在使用 QuickFIX 示例文件作为开始我的项目的方式,我能够连接到目标机器并获取市场数据
标 checkout 现在图片的底部吗?
我对这个 html/css 完全陌生,我正在尝试将带有背景的文本作为图像 float 。是的,我这样做了,但问题是文本 float 在图像的顶部。如果使用 margin-top 进行调整图片,它只是简
我是一名优秀的程序员,十分优秀!