我的目标是能够从此XML文件中检索<Cdtr><Id>
的值:
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:com.firmaname:response.002">
<DocId>1261076951</DocId>
<CreateDtTm>2016-11-23T14:53:23.938Z</CreateDtTm>
<ResponseCd>OK</ResponseCd>
<Dbtr>
<Id>debtorId</Id>
<Name>debtorName</Name>
</Dbtr>
<Cdtr>
<Id>creditorId</Id>
<Name>creditorName</Name>
</Cdtr>
</Document>
请注意,此文件有2个<Id>
个节点,因此我必须指定节点的确切路径。结果应该是'creditorId&#39;。
我的代码是:
XNamespace ns = "urn:com.firmaname:response.002";
var results = requestMessage.Descendants(ns + "Id").First().Value;
但是这将会回归'debtorId&#39;。我在这里搜索了一种检索确切路径的方法,但它们似乎都涉及使用带有XElement的Xpath。使用XElement时,我遇到了命名空间问题。我找到的所有建议都是关于使用XDocument ...
答案 0 :(得分:0)
我仍然会使用XDocument
并选择Cdtr
节点,然后选择其中的Id
节点。
如果您确信不需要名称空间,则可以使用<element>.Name.LocalName
。
XDocument doc = XDocument.Load("<path to xml");
XNamespace ns = "urn:com.firmaname:response.002";
var creditorid = doc.Descendants().Elements()
.Where(e => e.Name == ns + "Cdtr").Elements()
.First(e => e.Name == ns + "Id");
使用LocalName更新
var creditorid = doc.Descendants().Elements()
.Where(e => e.Name.LocalName == "Cdtr").Elements()
.First(e => e.Name.LocalName == "Id");
这很有效,但是如果可以,你应该使用命名空间。