解析C#2.0中的XML片段中的三个特定元素
问题描述:
如何使用C#2.0解析XML中少数标记的值?解析C#2.0中的XML片段中的三个特定元素
我想分析的标签,并像
1的值)<v9:Severity>SUCCESS</v9:Severity>
2)<v9:TrackingNumber>634649515000016</v9:TrackingNumber>
3)<v9:Image>iVBORw0KGgoAAAANSUhEUgAAAyAAAASwAQAAAAAryhMIAAAagEl</v9:Image>
如何与获得上述元素的值编程C#2.0?
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<soapenv:Body>
<v9:ProcessShipmentReply xmlns:v9="http://fedex.com/ws/ship/v9">
<v9:HighestSeverity xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SUCCESS</v9:HighestSeverity>
<v9:Notifications xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<v9:Severity>SUCCESS</v9:Severity>
<v9:Source>ship</v9:Source>
<v9:Code>0000</v9:Code>
<v9:Message>Success</v9:Message>
<v9:LocalizedMessage>Success</v9:LocalizedMessage>
</v9:Notifications>
<v9:CompletedShipmentDetail>
<v9:CompletedPackageDetails xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<v9:SequenceNumber>1</v9:SequenceNumber>
<v9:TrackingIds>
<v9:TrackingIdType>GROUND</v9:TrackingIdType>
<v9:TrackingNumber>634649515000016</v9:TrackingNumber>
</v9:TrackingIds>
<v9:Barcodes>
<v9:BinaryBarcodes>
<v9:Type>COMMON_2D</v9:Type>
<v9:Value>Wyk+HjAxHTAyMDI3ODAdODQwHTEzNx02MzQ2NDk1</v9:Value>
</v9:BinaryBarcodes>
<v9:StringBarcodes>
<v9:Type>GROUND</v9:Type>
<v9:Value>9612137634649515000016</v9:Value>
</v9:StringBarcodes>
</v9:Barcodes>
<v9:Label>
<v9:Type>OUTBOUND_LABEL</v9:Type>
<v9:ShippingDocumentDisposition>RETURNED</v9:ShippingDocumentDisposition>
<v9:Resolution>200</v9:Resolution>
<v9:CopiesToPrint>1</v9:CopiesToPrint>
<v9:Parts>
<v9:DocumentPartSequenceNumber>1</v9:DocumentPartSequenceNumber>
<v9:Image>iVBORw0KGgoAAAANSUhEUgAAAyAAAASwAQAAAAAryhMIAAAagEl</v9:Image>
</v9:Parts>
</v9:Label>
</v9:CompletedPackageDetails>
</v9:CompletedShipmentDetail>
</v9:ProcessShipmentReply>
</soapenv:Body>
</soapenv:Envelope>
答
既然你说你使用C#2.0(和,因此,不能使用LINQ到XML),最简单的办法只有找出你的XML的单值将使用XPath:
- 您可以使用XPathNavigator(MSDN:Select XML Data using XPathNavigator)
- 或者您可以直接使用XmlNode.SelectNodes。
因为你的XML命名空间包含<v9:...>
,这个问题变得有点复杂:需要初始化一个XmlNamespaceManager
并把它传递给XPathNavigator
。这里有一篇博客文章详细解释了这个问题。一个例子也可以在XmlNode.SelectNodes MSDN页面找到(参见上面的链接)。
+1
+1。此外,用户应该阅读[xml命名空间](http://msdn.microsoft.com/en-us/library/ms950779.aspx) – Reniuz
这里是LINQ到XML教程:http://msdn.microsoft.com/en-us/library/bb387098.aspx。你究竟在哪里卡住? – Heinzi
我正在使用c#2.0,所以我不能使用LINQ。 – Mou