XML 中的意外术语
Unexpected term in XML
我想反序列化一个 XML 并得到一个异常 <ehd xmlns='urn:ehd/001> was not expected
。我尝试了不同的命名空间但没有任何帮助,所以我不知道我能做些什么来解决它。
XML的第一行:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ehd:ehd ehd_version="1.40" xmlns:ehd="urn:ehd/001" xmlns="urn:ehd/kts/001">
<ehd:header>
<ehd:id EX="11944b3a-4f86-4da2-af6e-e24bedd6b523" RT="74"/>
<ehd:document_type_cd V="KTS"/>
</ehd:header>
<ehd:body>
<kostentraeger_liste>
<kostentraeger V="01101">
<gueltigkeit V="1994-01-01.."/>
这是我的反序列化代码:
var stream = new FileStream(@"I:\medatis\kleinprojekte\KassenlisteKBV\KbvRohdaten\KTStamm_2017_1.xml", FileMode.Open, FileAccess.Read);
var seri = new XmlSerializer(typeof(KostentraegerListe));
KostentraegerListe liste = null;
try
{
liste = (KostentraegerListe) seri.Deserialize(stream);
stream.Close();
}
catch (Exception e)
{
Trace.WriteLine(e.GetBaseException());
}
这里是可序列化的 类:
[Serializable]
[DebuggerStepThrough]
[XmlType(AnonymousType = true)]
[XmlRoot(ElementName="kostentraeger_liste", Namespace = "urn:ehd/001", IsNullable = false)]
public class KostentraegerListe
{
private List<Kostentraeger> _kostentraegerListe;
[XmlElement("kostentraeger")]
public List<Kostentraeger> Kostentraeger
{
get { return _kostentraegerListe ?? (_kostentraegerListe = new List<Kostentraeger>()); }
set { _kostentraegerListe = value; }
}
}
[SerializableAttribute]
[DebuggerStepThrough]
[XmlType(AnonymousType = true)]
public class Kostentraeger
{
private string _kostentraegernummer = String.Empty;
[XmlAttribute("V")]
public string Kostentraegernummer
{
get { return _kostentraegernummer; }
set { _kostentraegernummer = value; }
}
}
您需要一个定义 ehd 命名空间的父节点:
<?xml version="1.0" encoding="iso-8859-1"?>
<Root xmlns:ehd="Add a namespace here">
<ehd:ehd ehd_version="1.40" xmlns:ehd="urn:ehd/001" xmlns="urn:ehd/kts/001">
<ehd:header>
<ehd:id EX="11944b3a-4f86-4da2-af6e-e24bedd6b523" RT="74"/>
<ehd:document_type_cd V="KTS"/>
</ehd:header>
<ehd:body>
<kostentraeger_liste>
<kostentraeger V="01101">
<gueltigkeit V="1994-01-01.."/>
</kostentraeger>
</kostentraeger_liste>
</ehd:body>
</ehd:ehd>
</Root>
主要问题是您定义的 类 仅代表您正在反序列化的文档的一个片段。您需要定义 类 以至少表示 ehd
和 body
元素,并且 body
元素将包含 kostentraeger_liste
。最低要求如下:
[XmlRoot("ehd", Namespace = "urn:ehd/001")]
public class Ehd
{
[XmlElement("body")]
public Body Body { get; set; }
}
public class Body
{
[XmlElement("kostentraeger_liste", Namespace = "urn:ehd/kts/001")]
public KostentraegerListe KostentraegerListe { get; set; }
}
public class KostentraegerListe
{
[XmlElement("kostentraeger")]
public List<Kostentraeger> Kostentraeger { get; set; }
}
public class Kostentraeger
{
[XmlAttribute("V")]
public string Kostentraegernummer { get; set; }
}
有关工作演示,请参阅 this fiddle。
我想反序列化一个 XML 并得到一个异常 <ehd xmlns='urn:ehd/001> was not expected
。我尝试了不同的命名空间但没有任何帮助,所以我不知道我能做些什么来解决它。
XML的第一行:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ehd:ehd ehd_version="1.40" xmlns:ehd="urn:ehd/001" xmlns="urn:ehd/kts/001">
<ehd:header>
<ehd:id EX="11944b3a-4f86-4da2-af6e-e24bedd6b523" RT="74"/>
<ehd:document_type_cd V="KTS"/>
</ehd:header>
<ehd:body>
<kostentraeger_liste>
<kostentraeger V="01101">
<gueltigkeit V="1994-01-01.."/>
这是我的反序列化代码:
var stream = new FileStream(@"I:\medatis\kleinprojekte\KassenlisteKBV\KbvRohdaten\KTStamm_2017_1.xml", FileMode.Open, FileAccess.Read);
var seri = new XmlSerializer(typeof(KostentraegerListe));
KostentraegerListe liste = null;
try
{
liste = (KostentraegerListe) seri.Deserialize(stream);
stream.Close();
}
catch (Exception e)
{
Trace.WriteLine(e.GetBaseException());
}
这里是可序列化的 类:
[Serializable]
[DebuggerStepThrough]
[XmlType(AnonymousType = true)]
[XmlRoot(ElementName="kostentraeger_liste", Namespace = "urn:ehd/001", IsNullable = false)]
public class KostentraegerListe
{
private List<Kostentraeger> _kostentraegerListe;
[XmlElement("kostentraeger")]
public List<Kostentraeger> Kostentraeger
{
get { return _kostentraegerListe ?? (_kostentraegerListe = new List<Kostentraeger>()); }
set { _kostentraegerListe = value; }
}
}
[SerializableAttribute]
[DebuggerStepThrough]
[XmlType(AnonymousType = true)]
public class Kostentraeger
{
private string _kostentraegernummer = String.Empty;
[XmlAttribute("V")]
public string Kostentraegernummer
{
get { return _kostentraegernummer; }
set { _kostentraegernummer = value; }
}
}
您需要一个定义 ehd 命名空间的父节点:
<?xml version="1.0" encoding="iso-8859-1"?>
<Root xmlns:ehd="Add a namespace here">
<ehd:ehd ehd_version="1.40" xmlns:ehd="urn:ehd/001" xmlns="urn:ehd/kts/001">
<ehd:header>
<ehd:id EX="11944b3a-4f86-4da2-af6e-e24bedd6b523" RT="74"/>
<ehd:document_type_cd V="KTS"/>
</ehd:header>
<ehd:body>
<kostentraeger_liste>
<kostentraeger V="01101">
<gueltigkeit V="1994-01-01.."/>
</kostentraeger>
</kostentraeger_liste>
</ehd:body>
</ehd:ehd>
</Root>
主要问题是您定义的 类 仅代表您正在反序列化的文档的一个片段。您需要定义 类 以至少表示 ehd
和 body
元素,并且 body
元素将包含 kostentraeger_liste
。最低要求如下:
[XmlRoot("ehd", Namespace = "urn:ehd/001")]
public class Ehd
{
[XmlElement("body")]
public Body Body { get; set; }
}
public class Body
{
[XmlElement("kostentraeger_liste", Namespace = "urn:ehd/kts/001")]
public KostentraegerListe KostentraegerListe { get; set; }
}
public class KostentraegerListe
{
[XmlElement("kostentraeger")]
public List<Kostentraeger> Kostentraeger { get; set; }
}
public class Kostentraeger
{
[XmlAttribute("V")]
public string Kostentraegernummer { get; set; }
}
有关工作演示,请参阅 this fiddle。