【发布时间】:2012-06-21 15:34:04
【问题描述】:
我通过一些 WCF 消息的 xmlserialization 生成了一些 xml。
现在我想创建一个通用方法,在该方法中我将提供一个 xml 文件名和一个前缀,如 mailxml12。
然后在 xml 文件中,那些名称中没有任何命名空间前缀的元素应替换为 mailxml12:
喜欢的源文件是:
<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:前缀的元素名称。
喜欢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 解析为字符串的代码,因此尽管名称空间声明等存在问题,但它应该可以工作。但是,您应该尝试确定为什么其他建议的解决方案在您的应用程序。
标签: c# .net xml xml-parsing