-2

有人可以告诉我如何在 .NET 3.5 框架下使用 XPath 和 C# 从下面的 XML 中提取错误元素吗?

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:do_OTA_VehAvailRateRQResponse xmlns:ns1="urn:vanguard-web-webservices-ota-IOTA" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<return xsi:type="xsd:string"><OTA_VehAvailRateRS TimeStamp="2013-04-03T18:16:00" TransactionIdentifier="215997103" SequenceNmbr="1" Target="Production" Version="2.0" xmlns="http://www.opentravel.org/OTA/2003/05">
  <Errors>
    <Error Type="1" Code="999">COMPANY NAME FIELD IS INVALID</Error>
  </Errors>
</OTA_VehAvailRateRS>
</return>
</ns1:do_OTA_VehAvailRateRQResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
4

4 回答 4

0

使用

//*[name()='Errors']

这将选择 XML 文档中名称为“Errors”的任何元素——无论元素的名称空间如何。

或者,如果您想要更精确并考虑到元素所在的确切名称空间,您需要使用一个对象并使用它的方法XmlNamespaceManager注册前缀和名称空间之间任何需要的关联。AddNamespace()

于 2013-04-04T05:04:57.343 回答
0

试试这个代码:

XmlDocument xmlDoc = new XmlDocument();

xmlDoc .LoadXml(xmlSting); //If u have a xml string, you can create xmlDocument like this, otherwise u can use file name to create xmlDocument.

String error = .SelectSingleNode("SOAP-ENV:Envelope/SOAP-ENV:Body/return/Errors/Error").Value;
于 2013-04-04T05:14:41.573 回答
0
XmlNodeList errorNodes=new XmlDocument().Load("xmlFilePath").GetElementsByTagName("Errors");
于 2013-04-04T05:59:33.793 回答
0

如果您不向我们展示您的代码,我们将无法判断您哪里出错了。

但我们可以猜测。您的 Errors 元素位于命名空间中,未能认识到这一事实在没有经验的人中是一个常见的错误,我很乐意打赌这是您的错误。

要在命名空间中查找元素,您需要一个路径,例如 //e:Errors,其中前缀 e 绑定(在 C# API 级别)到命名空间http://www.opentravel.org/OTA/2003/05

(抱歉,您并没有说您没有经验。我是从以下事实推断出这一点:如果您有经验,您会发布您的 XPath 代码)。

于 2013-04-04T07:24:55.887 回答