C# 具有两个名称空间的Xml解析
我正在研究xml解析。 我的xml文档是C# 具有两个名称空间的Xml解析,c#,xml,serialization,C#,Xml,Serialization,我正在研究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" T
<?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文档的标准方法是使用类。要开始,如果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);
注意,在上面的示例中,我们需要使用指定xpath表达式中元素的名称空间。看
要了解更多详细信息,您应该能够使用xpath和XmlDocument
类的众多教程之一
为了完整起见,这里是使用类的相同示例。为此,您需要使用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);
只需使用XmlDocument或XDocument.into,您想将其解析为什么?您的输出是什么?这很好,您希望解析它,但在解析之后您将如何处理它?您可以使用XElement.Parse()将其转换为XElement?目前是什么给您带来了问题?LINQtoXML有很好的名称空间支持,OP几乎肯定想使用XDocument类。XmlDocument有点过时,更难使用。@Henk真的吗?最多情况下,XDocument
的用法几乎相同。如果它没有损坏…只有在使用桥接XPath方法时,用法才是相同的。如果您使用更多本机的.Elements、.Attribute、.substants等,则会有所不同。