2011-07-11 47 views
12

是否可以使用XmlDocument類爲任何XML元素動態設置值?假設我的XML是如何使用XmlDocument設置xml元素的值類

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

我怎麼可能爲以下元素設置值一樣

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

我知道如何從XML提取數據,我認爲這也可以設定值對於使用XMLDocument類的XML元素。尋找指導。

+0

哪裏需要添加這些元素? – HiperiX

回答

22

如果你知道如何選擇一個值,那麼你可能也知道如何更新一個值。

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"; 

瞭解的重要一點是,<v9:Severity>節點具有內部text()節點,所以在上面的例子中,你不能使用Node.Value屬性。要做到這一點,你會這樣做,而不是:

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

請注意細微的差異。

+0

太好了.....謝謝 – Mou

0

使用XMLDocument類對上級節點執行XPath並在樹上添加2個額外的節點。

+0

我需要更改爲「嚴重性和源」元素添加新值的現有值。可能你不明白我的問題。 – Mou

相關問題