具有两个名称空间的Xml解析
我正在处理xml解析。 我的xml文档是具有两个名称空间的Xml解析
<?xml version="1.0"?>
<BCPFORMAT
xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t"
MAX_LENGTH="12"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"
MAX_LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
MAX_LENGTH="30"
COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT"/>
<COLUMN SOURCE="2" NAME="firstname" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="3" NAME="lastname" xsi:type="SQLVARYCHAR"/>
</ROW>
</BCPFORMAT>
请帮我解析这个文档。
像这样解析一个小型XML文档的标准方法是使用XmlDocument
类。为了让您一开始,如果XML文档包含在文件“的test.xml”您可以使用以下方法:
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("bulk", "http://schemas.microsoft.com/sqlserver/2004/bulkload/format");
XmlElement fieldElement = (XmlElement)doc.SelectSingleNode("bulk:BCPFORMAT/bulk:RECORD/bulk:FIELD[@ID = 1]", nsmgr);
Console.WriteLine(fieldElement.Attributes["MAX_LENGTH"].Value);
注意,在上面的例子中,我们需要使用一个XmlNamespaceManager
指定元素的命名空间在我们的xpath表达式中。请参阅HOW TO: Specify Namespaces When You Use an XmlDocument to Execute XPath Queries in Visual C# .NET
有关比此更详细的内容,您应该可以使用xpath和XmlDocument
类中的许多教程之一。
为了完整起见,下面是使用XDocument
类代替的相同示例。为此,您需要使用using System.Xml.XPath;
。
XDocument doc = XDocument.Load("test.xml");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("bulk", "http://schemas.microsoft.com/sqlserver/2004/bulkload/format");
XElement fieldElement = (XElement)doc.XPathSelectElement("bulk:BCPFORMAT/bulk:RECORD/bulk:FIELD[@ID = 1]", nsmgr);
Console.WriteLine(fieldElement.Attribute(XName.Get("MAX_LENGTH")).Value);
OP几乎肯定要使用__XDocument__类。 XmlDocument有点过时了,很难使用。 –
@亨克*真* *?充其量,'XDocument'的用法几乎是一样的。如果没有损坏... – Justin
如果您使用桥接XPath方法,则只有相同的用法。如果你使用更原生的.Elements,.Attribute,.Descendents等,它会变得不同。 –
只需使用XmlDocument或XDocument。 –
成你想分析的东西?你的输出是什么? –
多数民众赞成在伟大的,你想解析它,但你会怎么做后,你这样做?你可以使用XElement.Parse()把它变成一个XElement? – kmcc049