DTD验证#必填字段和空字符串

时间:2019-05-07 02:45:52

标签: c# xml dtd required

我正在系统中进行XML验证,并且已经通过XmlReader实现了此功能,但是我想使用EMPTY STRING值验证#Required属性。有没有办法在DTD属性中实现这一点?

DTD:

<!ATTLIST TEST
   pUsername CDATA #REQUIRED (...SHOULD NOT BE AN EMPTY STRING)
   pTestAttrib CDATA #REQUIRED (...SHOULD NOT BE AN EMPTY STRING)
   >

XML:

<TEST pUsername="" pTestAttrib=""> (I want to validate if this attribute value is empty string)

C#:伪代码

XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationEventHandler += delegate (object sender, ValidationEventArgs args) { messageBuilder.AppendLine(args.Message); };
settings.ValidationType = ValidationType.DTD;
settings.DtdProcessing = DtdProcessing.Parse;
using (XmlReader reader = XmlReader.Create(stream, settings))
{
    do
    {
    }
    while (reader.Read());
}

1 个答案:

答案 0 :(得分:0)

您可以将属性声明为NMTOKEN or NMTOKENS,但是这些属性的值仅需要包含NameChar即可。

不确定是否适用于来自第三方系统的所有可能值。

否则,就DDT更改而言,您将陷入困境。