2011-07-11 35 views
12

Có thể đặt giá trị động cho bất kỳ phần tử XML nào sử dụng lớp XmlDocument không? Giả sử XML của tôi làcách chúng ta có thể đặt giá trị cho phần tử xml bằng cách sử dụng lớp XmlDocument

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

Làm thế nào tôi có thể thiết lập giá trị cho các phần tử bên dưới như

<v9:Severity>SUCCESS</v9:Severity> 
<v9:Source>ship</v9:Source> 

tôi biết làm thế nào để trích xuất dữ liệu từ XML và tôi nghĩ rằng nó cũng có thể thiết lập giá trị cho phần tử XML sử dụng lớp XMLDocument. Tìm kiếm hướng dẫn.

+0

Trường hợp bạn cần thêm những yếu tố này vào đâu? – HiperiX

Trả lời

22

Nếu bạn biết cách chọn giá trị, bạn có thể biết cách cập nhật một giá trị.

XmlDocument doc = new XmlDocument(); 
doc.Load(...); 
XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable); 
nsMgr.AddNamespace("v9", "http://fedex.com/ws/ship/v9"); 

XmlNode severityNode = doc.SelectSingleNode("//v9:Severity", nsMgr); 
severityNode.innerText = "FAILURE"; 

Điều quan trọng cần biết là nút <v9:Severity>text() nút bên trong, vì vậy trong ví dụ trên bạn không thể sử dụng Node.Value tài sản. Để làm điều đó, bạn sẽ làm một việc như thế này:

XmlNode severityTextNode = doc.SelectSingleNode("//v9:Severity/text()", nsMgr); 
severityTextNode.Value = "FAILURE"; 

Lưu ý sự khác biệt tinh tế.

+0

wow tuyệt vời ..... cảm ơn – Mou

0

Thực hiện XPath với nút cấp cao bằng cách sử dụng lớp XMLDocument và thêm 2 nút phụ trên cây.

+0

tôi cần phải thay đổi giá trị hiện tại của việc thêm một giá trị mới cho phần tử Mức độ nghiêm trọng & Nguồn. có lẽ bạn không hiểu câu hỏi của tôi. – Mou

Các vấn đề liên quan