我有这个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 ,但没有任何回复。
答案 0 :(得分:2)
您没有收到结果,因为Document
代码中有一个名称空间。
要解决此问题,请声明一个命名空间,然后添加&#34;添加&#34;它是元素的名称:
XNamespace ns = "urn:com.dovetailsystems:dps-if-gfc-request.001";
Console.WriteLine(xml.Descendants(ns + "TxId").First().Value);
此代码将打印&#34; FirstTxId&#34;到控制台。
您还可以暂时删除命名空间(删除后,不保存文档或在保存之前重新添加):
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();
删除后,原始代码应按预期工作。
不幸的是,似乎没有办法忽略命名空间;所以无论是添加还是删除它都必须要做到这一点......
答案 1 :(得分:1)
此代码可以帮助您:
XmlDocument document = new XmlDocument();
document.Load("YOUR_PATH");
var x= document.GetElementsByTagName("TxId").Item(0);
document.GetElementsByTagName获取您只想要第一个子节点的节点集合。所以我们选择Item(0)。