我有一点问题,无法弄清楚如何解决它。 我正在针对模式验证XDocument,我得到所有有错误的节点。但是在发现错误后,验证过程不会更深入。
_document.Validate(_schema, (o, e) =>
{
XElement xEle = null;
if (o is XAttribute)
xEle = (o as XAttribute).Parent;
if (o is XElement)
xEle = o as XElement;
if (xEle == null)
{
Debug.WriteLine(o.ToString());
return;
}
_elemtList.Add(o as XElement);
});
我的问题就像关注
<Car>
<CarName></CarName>
<CarInteriour>
<CarInteriorColor>Red</CarInteriorColor>
</CarInteriour>
</Car>
让我们说这是有效的。 如果我将以下内容更改为
<Car>
<CarInteriour>
<CarInteriorColor></CarInteriorColor>
</CarInteriour>
</Car>
这里缺少CarName标签,颜色为红色。 我只会得到CarName的错误而不是红色。 验证过程似乎跳过了该结构,因为它确实发现了错误。 即使出现错误,还有办法继续验证吗?
答案 0 :(得分:1)
好的,我发现了一个适合我的解决方案,我正在给你一个更新,因为它非常整洁。
我现在在做什么。我在_document.Descendants()中为每个XElement使用foreach,并验证每个元素。这会多次查找文档中的每个错误。 所以我做的是,如果我之前已经找到了这个错误,我会检查我的错误列表。我的错误列表是我自己的类errorcontainer的列表,其中包含找到的带有错误消息的XElement。 这样我只会在列表中添加新错误并在对话框中显示此错误。用户现在可以选择错误,我将直接跳转到编辑器中的错误。
ErrorContainer errorContainer = new ErrorContainer(xEle, e.Message);
if (_errors.Any(error => error.xElement.Equals(errorContainer.xElement) && string.CompareOrdinal(error.errorMessage, errorContainer.errorMessage) == 0))
{
return;
}
_errors.Add(errorContainer);
我希望这可以帮助其他需要帮助解决此问题的人:)