-2

.NET 3.5 Framework で XPath と C# を使用して、以下の XML から Errors 要素を抽出する方法を教えてください。

<?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']

これにより、要素の名前空間に関係なく、名前が「Errors」である XML ドキュメント内の任意の要素が選択されます。

または、より正確に、要素が含まれている正確な名前空間を考慮したい場合は、オブジェクトを使用し、そのメソッド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

コードを提示しないと、どこで問題が発生したかわかりません。

しかし、推測できます。あなたの Errors 要素は名前空間にあり、この事実を認識できないことは、経験の浅い人の間で非常に一般的なエラーであるため、これがあなたのバグであると確信しています.

名前空間内の要素を検索するには、//e:Errors などのパスが必要です。ここで、プレフィックス e は (C# API レベルで) 名前空間http://www.opentravel.org/OTA/2003/05にバインドされています。

(申し訳ありませんが、経験が浅いとは言いません。経験があれば、XPath コードを投稿したであろうという事実から推測しています)。

于 2013-04-04T07:24:55.887 に答える