【问题标题】:How to fill empty xml elements with default values from XSD( through validation)?如何用 XSD(通过验证)的默认值填充空的 xml 元素?
【发布时间】:2014-03-12 19:30:54
【问题描述】:

我使用的是javax.xml.validation.Validator.validate(StreamSource, StreamResult),这是我的 xml 和 xsd:

xsd:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string" default="nobody"/>
    </xs:sequence>
  <xs:attribute name="color" type="xs:string" default="red" />
  </xs:complexType>
</xs:element>
</xs:schema>


xml:

<note>
  <to>you</to>
  <from></from>
</note>


但我从 StreamResult 得到的是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<note color="red">
  <to>you</to>
  </from>
</note>


根据W3C XML Schema Part 0(参见2.2.1 Occurrence Constraints的第4段),

如果元素出现时没有任何内容,模式处理器会为元素提供与默认属性相同的值。

为什么填充了默认属性而不是空元素?如何填写默认值?

【问题讨论】:

  • 你能重新编辑帖子吗?它缺乏信息,因此不清楚您在寻找什么!

标签: xml xsd


【解决方案1】:

XSD 用于验证。它验证 XML 的结构和数据,并让您知道 XML 是否符合预期或与 Schema 中定义的不同。

不是修改XML数据。

参考this [click_here]

您正在寻找的是 XSLT。 XSLT 用于将 XML 转换为具有自定义层次结构和数据的 XML(或 HTML/文本)。

或者您也可以使用 .Net C# 或 Java 等主机代码中的 DOM 概念来修改源 XML。

或者另一种方法是将 XML 视为字符串并使用字符串操作技术。 但不推荐这种方法

【讨论】:

  • 感谢您的回答。但是如果不是修改XML数据,为什么要填充default属性,甚至将空元素&lt;from&gt;&lt;/from&gt;修改为&lt;/from&gt;。我还应该对 XSD 设置做些什么?
  • 我认为是&lt;from/&gt; 而不是&lt;/from&gt;。大多数 XML 解析器将 &lt;node&gt;&lt;/node&gt; 转换为 &lt;node/&gt;,这是另一个相同的,即 Null 标记..这两者之间没有区别..
  • 我的意思是.. XSD 不会改变任何东西,XSD 只是另一个用于验证的 XML。这是我认为在你的情况下是 Java 的主机程序正在发挥作用..
猜你喜欢
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 2015-07-16
  • 1970-01-01
  • 2018-02-09
相关资源
最近更新 更多