Pau*_*l L 10 xml null xsd dtd xmlserializer
关于我的另一个问题:XML反序列化null元素?
我从第三方服务器获得这些元素用于API测试:
<Taxable />
<DefaultPurchasePrice />
Run Code Online (Sandbox Code Playgroud)
我刚刚意识到,现在我自己也在混淆自己这样的元素是否代表空对象或空.
谈论对象,它们是一样的,null对象通常意味着空对象引用对吗?但是尝试将XML元素映射到数据字段/值,它们可能是不同的,即空字符串是空字符串,但对于十进制价格或布尔值,它们是未定义的,等于空,但不会为空,除非定义它们可以为空.
同样,我的XmlSerializer的问题是无法处理像这样的空元素.我可以在我的代码中轻松修复它.或者我应该问人们提供的XML有一个定义良好的XML吗?因为看起来像这样的空XML元素是未定义的:它在这里,但是对于XML元素本身可能是null还是空无关紧要?但是对于那个元素,我的代码需要弄清楚如何处理它,除非我将所有的C#类数据字段设置为字符串类型.否则,如果我的代码试图直接将空或空XML元素映射到某个数据字段,它肯定会失败.
我不得不问这个问题,因为我遇到XML有很多这些元素,对于那些特殊元素,我的.NET XML序列化代码需要将这些字段映射为字符串,如果字符串不为空,我将它们视为对应的数据类型,否则我将它们设置为null.在我进行反序列化之前,我最终删除了那些空元素,因为它更容易.但我徘徊:"我在代码中真正做了什么?我只是删除了空元素或空元素吗?因为它们明显不同!但是编写XML的人认为它们是相同的,因为XML本身没有概念'null',有些人认为我有责任决定它是null还是空.但XML确实能让你以更清晰的方式表示'null'元素
编辑:
在我提供的示例中,这两个元素显然应该是null而不是空元素.XML实际上没有null的概念,但是这些元素可以省略(如果它们是null,不要将它们放入XML中),或者使用更好的表示,如@svick所述.或者在其他情况下,应该在有意义时使用空元素.但不适用于Decimal或Boolean.
Mer*_*ham 16
<Taxable />
<DefaultPurchasePrice />这是什么:null或空元素?
它是空的.它在语义上与以下相同:
<Taxable></Taxable>
<DefaultPurchasePrice></DefaultPurchasePrice>
Run Code Online (Sandbox Code Playgroud)
XML本身存在的唯一"空"概念是缺少元素.您不能使用XML的语义指定一个元素并说它是null.您必须具有某种模式(显式模式,例如DTD,XSD或Schematron,或隐式/逻辑模式)才能执行此操作.
但这并不限制解释XML的应用程序,也不限制与XML相关的官方技术.例如,XSD具有xsi:nil="true"属性.即使您可以将某些架构属性应用于XML,这些属性也不是"纯"XML; 它们是XSD架构提供的附加功能.
这是一种情况,XSD可以在基本XML结构之上自由构建自己的语义,并添加一个nil不存在的显式位置.这种灵活性被认为是XML的优势.
| 归档时间: |
|
| 查看次数: |
44976 次 |
| 最近记录: |