我正在开发一个脚本,该脚本从XML读取数据以确定工作流,并且XML变得安静复杂;所有这些变化都是有效的,ID属性是可选的,主节点还有一些其他可选属性,我正在研究不同可选属性和节点的可能性。
<ManageINI id="TASK ID">
<Target>PATH TO INI</Target>
<DeleteKey>
<Section>SECTION NAME</Section>
<Name>KEY NAME</Name>
</DeleteKey>
</ManageINI>
<ManageINI id="TASK ID">
<Target>PATH TO INI</Target>
<ReviseKey>
<Section>SECTION NAME</Section>
<Name>KEY NAME</Name>
<Value>VALUE</Value>
</ReviseKey>
</ManageINI>
<ManageINI id="TASK ID">
<Target>PATH TO INI</Target>
<ReviseKey>
<Source>PATH TO INI</Source>
<Section>SECTION NAME</Section>
<Name>KEY NAME</Name>
</ReviseKey>
</ManageINI>
<ManageINI id="TASK ID">
<Target>PATH TO INI</Target>
<ReplaceString>
<Replace>STRING 1</Replace>
<With>STRING 2</With>
</ReplaceString>
</ManageINI>
目前XML已经过人工编辑,可能需要保留一段时间。此外,&#34;用户&#34;在这种情况下,可能是一个有点非技术性的人。非常聪明的人,但更有可能成为一名建筑师或结构工程师,成为具有IT背景的爱尔兰人。 我想要做的是验证XML并提供有关任何问题的有意义的记录反馈。如果有人拼错了节点名称,我想标记它。如果有人在不支持它的节点上使用可选属性,我想标记它。如果有人在属性中使用了不正确的值,我想标记它。而且,我有25个其他节点几乎一样复杂,但也完全不同。 我认为有三种方法可以解决这个问题,我不确定哪条路可以走下去。
1:基于模式的验证。在我看来,我所拥有的XML非常复杂,基于模式的验证并不起作用。但也许我不太了解这种方法。另外,我可以在函数中将模式创建为此字符串,以便保持自包含和模块化吗?或者我是否必须使用XSL文件,然后需要与使用经过验证的XML的代码分开管理?
2:&#34;模式&#34;匹配。每个&#34;任务&#34;节点作为[Xml.XmlElement]
传递给适当的函数。如果我还在函数中创建了[Xml.XmlElement]
,在所有正确使用的有效示例中,我可以编写一些代码来比较传递的Node和选项。
3:我可以编写查看XML和日志问题的代码。这似乎是最有效的工作,也是最不优雅的,也是最灵活的。它也是我之前使用的那种方法,后来才发现有更好的方法。 ;)
我知道这是一个有点抽象的问题,但希望有人之前已经越过这座桥,并且在我花了很多时间(可能在选项3)之前可以指出我正确的方向,但却发现我选择了错误的路径。