尝试使用C#通过XmlReader查询XML,但获取错误原因命名空间别名。 XML文件非常大(< 1,6GB),并且别名和名称空间可能因文件而异。使用命名空间别名/前缀查询XmlReader的问题
在下面我试着找到“MsgHead”标签,但该例子中,由于有一个别名(< * MH: * MsgHead>)查询不检测的标签。由于名称空间和别名不能选择硬编码别名和名称空间。
是否有任何选项可以忽略名称空间别名?
XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<mh:MsgHead xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:mh="http://www.kith.no/xmlstds/msghead/2006-05-24"
xmlns:n1="http://www.altova.com/samplexml/other-namespace"
xsi:schemaLocation="http://www.kith.no/xmlstds/msghead/2006-05-24 MsgHead-v1_2.xsd">
<mh:MsgInfo>
<mh:Type DN="xxx" V="xxx"/>
<mh:MIGversion>v1.2 2006-05-24</mh:MIGversion>
<mh:GenDate>2014-04-01T20:53:08</mh:GenDate>
<mh:MsgId>xxx</mh:MsgId>
<mh:ProcessingStatus DN="Produksjon" V="P"/>
<mh:RequestedPriority DN="Normal" V="N"/>
<mh:Ack DN="Ja" V="J"/>
<mh:Sender>
<mh:ComMethod DN="EDI" V="EDI"/>
<mh:Organisation>
<mh:OrganisationName>xxxx</mh:OrganisationName>
<mh:Ident>
<mh:Id>69</mh:Id>
<mh:TypeId S="xxx" DN="HER-id" V="HER"/>
C#代码:
string meldingsType = "N/A";
XmlReaderSettings settings = new XmlReaderSettings();
settings.CheckCharacters = false;
XmlReader xmlLeser = XmlReader.Create(fil, settings);
while (xmlLeser.Read())
{
if ((xmlLeser.NodeType == XmlNodeType.Element) && (xmlLeser.Name == "MsgHead"))
{
meldingsType = "Hodemelding";
break;
}
为什么你使用像XmlReader这样的低级工具?你有没有尝试LINQ到XML? –
由于该文件非常大,并且XmlReader未将该文件加载到内存中。但是,没有我没有尝试使用LINQ到XML,主要是因为我不熟悉LINQ。 – kaareol
您应该熟悉LINQ to XML。 'XNamespace mh =“http://www.kith.no/xmlstds/msghead/2006-05-24”; var msgHead = doc.Element(mh +“MsgHead”);' –