如何搜索XML以查找错误的节点

时间:2014-05-30 21:23:49

标签: c# xml xpath

我有一个大型XML文件(68Mb),我正在使用SQL Server Business Intelligence Studio 2008将XML数据提取到数据库中。 XML文件中存在一些错误,导致其无法执行。可能是丢失的标签或类似的东西。该文件非常大,我无法手动对其进行排序以查找错误。

以下是使用的XML架构的示例。

如何使用XPath使用C#在VS 2012中对XML进行排序?

一个例子很棒!

-<PhoneNumberList>

<PhoneNumber value="1234567890" type="Phone"/>

</PhoneNumberList>


-<YearsOfServiceList>

<YearsOfService experienceInMonths="24" description="SuperAdmin" objectCode="049"/>

</YearsOfServiceList>

</Person>


-<Person dob="1960-01-09T00:00:00" lastName="Smith" middleName="Will" firstName="John"     id="9999-9999-9999">


-<SiteList>


-<Site id="2014" siteLongName="HA" siteCode="1255" systemCode="999">


-<StaffPositionList>

<StaffPosition id="73" staffPosition="Administrator"/>

</StaffPositionList>

</Site>

</SiteList>


-<ProgramList>

 <Program id="1234" siteLongName="ABC" siteCode="0000" systemCode="205"/>

 <Program id="5678" siteLongName="DEF" siteCode="0000" systemCode="357"/>

 </ProgramList>


 -<TypeList>

 <Type Description="Leader" certificateType="D"/>

 <Type Description="Professional" certificateType="P"/>

 </TypeList>


-<EmailList>

<Email value="jsmith@somesite.com" type="Email"/>

</EmailList>


-<PhoneNumberList>

<PhoneNumber value="1234567890" type="Phone"/>

</PhoneNumberList>


-<YearsOfServiceList>

<YearsOfService experienceInMonths="24" description="SuperAdmin" objectCode="049"/>

</YearsOfServiceList>

</Person>


</PersonList>

</GetPersonDetail>

4 个答案:

答案 0 :(得分:1)

如果您想在代码中执行此操作,请创建一个描述数据有效格式的XSD文件,将其作为资源嵌入到您的应用中,然后使用此类代码

var errors = new List<string>();
var schemaSet = new XmlSchemaSet();
schemaSet.Add("", XmlReader.Create(new StringReader(Properties.Resources.NameOfXSDResource)));
document.Validate(schemaSet, (sender, args) =>
    {
        errors.Add(args.Message);
    }
);

这将为您提供验证错误列表。

答案 1 :(得分:0)

您不需要手动搜索&#34;&#34;如果您使用合格的文本编辑器。例如,NotePad ++的XML插件可以确定您的XML整体是否格式正确或有效,并且两个实例都将提供单独的错误消息。

如果您没有架构并且文件格式正确,则可以使用CLR的System.XML命名空间读入文档,然后使用LINQ迭代其节点to-XML,它可以让你非常精细地控制哪些节点去哪里。使用LINQ,您可以创建一个只包含有效条目的新XML文件,在确定无效条目的位置时,可以在程序上更正这些条目,甚至只是直接写入SQL服务器数据库。

您的问题排查过程应如下所示:

  1. XML 格式正确?我......它是否符合XML的基本规则?
  2. XML 有效吗?即,它是否具有您期望的元素和属性?
  3. 您的导入查询是否准确?

答案 2 :(得分:0)

对于这样的事情,我通常可以在Notepad++中检查并修复数据。安装XmlTools插件,它有一个用于检查xml语法和标签的菜单。

此外,这些破折号会给你带来麻烦,最好直接保存xml文件而不用手动复制。

答案 3 :(得分:0)

对于XML编辑器(如XMLBlueprint 64位(http://www.xmlblueprint.com/)或Stylus Studio(http://www.stylusstudio.com/),68 MB XML文件没有问题。只需检查xml文件的格式良好(XMLBlueprint中的F7),编辑器就会显示错误。