我有这个simpel xml文件:
<Document xmlns="urn:com.place:dps-if-gfc-request.001">
<ReqHdr>
<MsgId>IE1611240000000100000001</MsgId>
<CreDtTm>2016-11-24T10:14:33.327Z</CreDtTm>
<AppInstanceId>DPSH</AppInstanceId>
<TxId>FirstTxId</TxId>
</ReqHdr>
<ReqTxInf>
<PmtId>
<TxId>SecondTxId</TxId>
</PmtId>
<MsgTyp>Request</MsgTyp>
<CtgyPurp>
<Prtry>ECRI</Prtry>
</CtgyPurp>
</ReqTxInf>
</Document>
我正在尝试获取第一个元素的内容:
var xml = XElement.Load (@"myLovelyXmlFile.xml");
Console.Writeline(xml.Descendants("TxId").First().Value);
预期结果为FirstTxId,但没有返回任何内容。
发布于 2018-06-03 01:01:35
您得不到结果,因为Document
标记中有一个名称空间。
要解决此问题,请声明一个名称空间并将其“添加”到元素的名称中:
XNamespace ns = "urn:com.dovetailsystems:dps-if-gfc-request.001";
Console.WriteLine(xml.Descendants(ns + "TxId").First().Value);
这段代码将把"FirstTxId“打印到控制台。
您还可以临时删除名称空间(删除后,不要保存文档或在保存之前再次添加):
public static void RemoveNamespace(this XElement container)
{
container.DescendantsAndSelf().Attributes().Where(x => x.IsNamespaceDeclaration).Remove();
foreach (var elem in container.DescendantsAndSelf())
elem.Name = elem.Name.LocalName;
}
此扩展方法的用法:xml.Root.RemoveNamespace();
删除后,您的原始代码应该可以正常工作。
不幸的是,似乎没有办法忽略名称空间;因此,无论是添加还是删除它都必须做到这一点……
发布于 2018-06-03 01:07:28
此代码可帮助您:
XmlDocument document = new XmlDocument();
document.Load("YOUR_PATH");
var x= document.GetElementsByTagName("TxId").Item(0);
document.GetElementsByTagName获取您只想要第一个子节点的节点集合。因此,我们选择项(0)。
https://stackoverflow.com/questions/50659180
复制相似问题