【发布时间】:2018-05-22 20:58:44
【问题描述】:
我试图在 XML 文档中的特定位置插入一个 XML 节点。
这是我的 xml:
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<readContract xmlns="http://implementation.company.schema.reference">
<ContactNumbers>10158</ContactNumbers>
<productGroups>0085</productGroups>
<indicationBalanceInfo>false</indicationBalanceInfo>
<indicationBlocked>true</indicationBlocked>
</readContract>
</Body>
</Envelope>
我正在尝试在标签<productGroups>0085</productGroups>下方插入另一个标签<productGroups>0093</productGroups>
期待如下:
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<readContract xmlns="http://implementation.company.schema.reference">
<ContactNumbers>10158</ContactNumbers>
<productGroups>0085</productGroups>
<productGroups>0093</productGroups>
<indicationBalanceInfo>false</indicationBalanceInfo>
<indicationBlocked>true</indicationBlocked>
</readContract>
</Body>
</Envelope>
使用下面的C#代码来实现。
XmlDocument doc = new XmlDocument();
string inputxml = this.StServiceCallActivity5.InputEnvelope.InnerXml.ToString();
//Here inputxml contains whole xml document.
string addxml = "<productGroups>0093</productGroups>";
doc.LoadXml(inputxml);
XmlDocumentFragment xmlDocFrag = doc.CreateDocumentFragment();
xmlDocFrag.InnerXml = addxml;
XmlElement parentEle = doc.DocumentElement;
parentEle.AppendChild(xmlDocFrag);
它返回的值类似于
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<readContract xmlns="http://implementation.company.schema.reference">
<ContactNumbers>10158</ContactNumbers>
<productGroups>0085</productGroups>
<productGroups>0093</productGroups>
<indicationBalanceInfo>false</indicationBalanceInfo>
<indicationBlocked>true</indicationBlocked>
</readContract>
</Body>
<productGroups xmlns="">0093</productGroups>
</Envelope>
我是 C# 代码的新手,请帮助我按预期获取 XML 文档。 非常感谢您的帮助。
【问题讨论】:
-
您能否具体指出您的输出有什么问题,即它与您要查找的内容不匹配?请不要让我们梳理您的 XML 来试图找出问题所在。
-
它只是将新元素添加到文档的顶部节点。您需要导航到要将其添加到的节点 - 在您的情况下是
节点。 -
使用像
XmlNode titleNode = doc.SelectSingleNode("//Envelope/Body/readContract");这样的XPath查询