【问题标题】:Query issue on XmlReader with namespace alias/prefix使用命名空间别名/前缀在 XmlReader 上查询问题
【发布时间】:2014-04-09 07:06:48
【问题描述】:

尝试使用 C# 槽 XmlReader 查询 XML,但得到错误导致命名空间别名。 XML 文件非常大(

在下面的示例中,我尝试查找“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 to XML 吗?
  • 由于文件非常大并且 XmlReader 没有将文件加载到内存中。但是不,我没有尝试过 LINQ to XML,主要是因为我不熟悉 LINQ。
  • 您应该熟悉 LINQ to XML。 XNamespace mh = "http://www.kith.no/xmlstds/msghead/2006-05-24"; var msgHead = doc.Element(mh+"MsgHead");
  • 前缀/别名的问题在于它可能在下一个 xml 文件中完全不同,与命名空间相同。
  • 命名空间可能不同?那么你希望如何阅读这份文件呢?

标签: c# xml xml-namespaces xmlreader


【解决方案1】:

不要检查某个命名空间前缀。前缀无关紧要,重要的是元素的本地名称和命名空间 URI。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 2012-10-22
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
相关资源
最近更新 更多