1

我想使用 Relax NG 模式来验证 XML 文件。作为验证的一部分,我想确保一组节点中没有空白。例如,我希望前两个<emptyCheck>节点进行验证,但在此示例中第三个和第四个节点失败:

<?xml version="1.0" encoding="UTF-8"?>
<testRoot>
    <emptyCheck/>
    <emptyCheck></emptyCheck>
    <emptyCheck> </emptyCheck>
    <emptyCheck>x</emptyCheck>
</testRoot>

下面的 Relax NG Schema 几乎可以工作。对于 的第四个实例,上述示例 XML 失败<emptyCheck>,但对于第三个实例则没有。

<?xml version="1.0" encoding="UTF-8"?>
<grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0">
    <start>
        <element name="testRoot">
            <oneOrMore>
                <element name="emptyCheck">
                    <empty/>
                </element>
            </oneOrMore>
        </element>
    </start>
</grammar>

我认识到,在大多数 XML 处理中,只有空格的节点并不重要。我仍然想解决这个问题,以便我可以执行编码风格指南。那么,有没有办法设置一个 Relax NG 模式,这样当一个节点应该完全为空时,文档将不会验证节点中是否只有空白?

4

1 回答 1

3

RELAX NG 允许声明为空的元素包含空格似乎有些古怪,尽管该决定具有合理的基础

无论如何,如果您的 RELAX NG 验证器支持 XSD 数据类型(大多数都支持),那么您可以通过指定元素内容必须是零长度字符串来使用它们来进一步限制允许的元素内容:

<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
  datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <start>
    <element name="testRoot">
      <oneOrMore>
        <element name="emptyCheck">
          <data type="string">
            <param name="maxLength">0</param>
          </data>
        </element>
      </oneOrMore>
    </element>
  </start>
</grammar>
于 2012-10-26T12:50:33.680 回答