【发布时间】:2019-05-22 19:22:58
【问题描述】:
我有需要解析的格式错误的 XML (SOAP) 文件。问题是 XML 没有正确的标头标签。
我尝试使用 XDocument 和 XmlDocument 解析文件,但都没有成功。 XML 从第 30 行开始,所以也许有一些方法可以在 XML 解析器读取文件之前跳过这些行?
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:eb="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd">
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="Finvoice.xsl"?>
<GGVersion="2.01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="a.xsd">
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader r = XmlReader.Create(file.FullName, settings);
XmlDocument xDoc = new XmlDocument();
xDoc.PreserveWhitespace = true;
xDoc.LoadXml("<xml/>");
xDoc.DocumentElement.CreateNavigator().AppendChild(r);
XmlNamespaceManager manager = new XmlNamespaceManager(xDoc.NameTable);
一旦尝试解析,我得到:意外的 xml 声明。 xml声明必须是文档中的第一个节点......
【问题讨论】:
-
这是 SOAP 消息数据中的新 XML 声明吗?除非您从消息中删除了 CDATA 标记,否则我认为没有任何方法可以让任何 XML 解析器接受它。
-
不,文件中没有任何 CDATA -tag。我稍微编辑了第一条消息,以便更好地了解 SOAP 标头。
-
有... options...
-
@sukkis 我不太明白 XML 看起来如何。您的意思是先有一个 SOAP 标头,然后然后是一个完整的 XML 文档,而您想丢弃该 soap 标头吗?在您要查找的 XML 之后没有 SOAP 信封吗?在这种情况下,这似乎可以通过简单的
Substring方法调用来解决。 -
@sukkis 我添加了另一种跳到第 30 行的方法。
标签: c# xml parsing soap xml-parsing