我有一些xml通過一些WCF消息的xmlserialization生成的一組。 現在我想製作一個通用的方法,我將提供一個xml文件名和一個像mailxml12
這樣的前綴。 然後在XML文件中沒有在其名稱中的任何名稱空間前綴應mailxml12:
如何更改某些元素的XML名稱空間
被替換像源文件的內容是:
<DeliveryApptCreateRequest d2p1:ApptType="Pallet" d2p1:PickupOrDelivery="Delivery" d2p1:ShipperApptRequestID="4490660303D5" d2p1:SchedulerCRID="234234" xmlns:d2p1="http://idealliance.org/Specs/mailxml12.0a/mailxml_defs" xmlns="http://idealliance.org/Specs/mailxml12.0a/mailxml_tm">
<SubmittingParty d2p1:MailerID6="123446" d2p1:CRID="342343" d2p1:MaildatUserLicense="A123" />
<SubmittingSoftware d2p1:SoftwareName="asds" d2p1:Vendor="123" d2p1:Version="12" />
<SubmitterTrackingID>2CAD3F71B4405EB16392</SubmitterTrackingID>
<DestinationEntry>No</DestinationEntry>
<OneTimeAppt>
<PreferredAppt>2012-06-29T09:00:00Z</PreferredAppt>
</OneTimeAppt>
<TrailerInfo>
<Trailer>
<TrailerNumber>A</TrailerNumber>
<TrailerLength>20ft</TrailerLength>
</Trailer>
<Carrier>
<CarrierName>N/A</CarrierName>
<URL>http://test.com</URL>
</Carrier>
<BillOfLadingNumber>N/A</BillOfLadingNumber>
</TrailerInfo>
</DeliveryApptCreateRequest>
所需的方法後,它會變成所有元素名稱不含前綴mailxml:
。 Like DeliveryApptCreateRequest
應該變成mailxml:DeliveryApptCreateRequest
而像d2p1:CompanyName
這樣的元素應保持原樣。
我曾與下面的代碼
private void RepalceFile(string xmlfile)
{
XmlDocument doc = new XmlDocument();
doc.Load(xmlfile);
var a = doc.CreateAttribute("xmlns:mailxml12tm");
a.Value = "http://idealliance.org/Specs/mailxml12.0a/mailxml_tm";
doc.DocumentElement.Attributes.Append(a);
doc.DocumentElement.Prefix = "mailxml12tm";
foreach (XmlNode item in doc.SelectNodes("//*"))
{
if (item.Prefix.Length == 0)
item.Prefix = "mailxml12tm";
}
doc.Save(xmlfile);
}
只與它的問題是,根元素試圖保持原樣,而因爲我需要
你只能意味着標籤元素或屬性呢? –
我已經發布了將xml解析爲字符串的代碼,因此儘管存在命名空間聲明等問題,它仍然可以正常工作。但是,您應該嘗試確定爲什麼其他建議的解決方案在您的應用程序中不起作用。 –