【问题标题】:DTD Validation #Required Field and empty stringDTD 验证#必填字段和空字符串
【发布时间】:2019-05-07 22:35:01
【问题描述】:

我正在我们的系统中进行 XML 验证,并且我已经通过 XmlReader 实现了这一点,但是我想使用 EMPTY STRING 值验证#Required Attribute。有没有办法在 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());
}

【问题讨论】:

  • 你的代码在哪里?我不明白,你想做什么
  • @Backs 已经编辑了我的问题,抱歉,这是我的第一个问题..
  • 您添加了 [c#] 标签,但我没有看到任何代码。您希望我们为您编写完整的解决方案吗?您应该先自己尝试一下,如果您的代码有问题,可以在这里提问。
  • 已经编辑好了..顺便谢谢指正..
  • 您知道这些属性中将包含哪些类型的值吗?也许您可以将它们声明为 NMTOKEN or NMTOKENS 而不是 CDATA。否则,就 DTD 更改而言,您将陷入困境。

标签: c# xml dtd required


【解决方案1】:

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

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

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

【讨论】:

  • 是的,如果 value 包含任何 nt-namechar 我得到验证错误,那是我现在的新问题。我可以通过我的业务对象验证传递的值,但我希望它尽可能简单。所以是的,我现在被困在 dtd 中。
猜你喜欢
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 2012-05-23
  • 2013-03-23
相关资源
最近更新 更多