我试图使用linq到xml来获取标签的内容。我似乎无法让它工作。任何帮助都会被贬低。
<BTMACRequestResponse xmlns="http://wholesale.fluidata.co.uk/bt">
<BTMACRequestResult xmlns:a="http://wholesale.fluidata.co.uk/bt/BTMacResponse" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:BTRequestID>0</a:BTRequestID>
<a:dateadded/>
<a:dsl>01491410786</a:dsl>
<a:expiryDate i:nil="true"/>
<a:mac i:nil="true"/>
<a:response xmlns:b="http://schemas.datacontract.org/2004/07/DataLayer">
<b:code>INVALIDACCOUNT</b:code>
<b:message>This account does either not belong to you or is not a valid BT ECO PLUS account.</b:message>
<b:severity i:nil="true"/>
</a:response>
<a:serviceID>6sdfs</a:serviceID>
<a:status i:nil="true"/>
</BTMACRequestResult>
</BTMACRequestResponse>
我的代码;
XNamespace a = @"http://wholesale.fluidata.co.uk/bt/BTMacResponse";
XNamespace b = @"http://schemas.datacontract.org/2004/07/DataLayer";
output = (from s in PostToFluidataBTWebservice.MacRequest(number, serviceID).
Descendants("BTMACRequestResponse")
.Elements("BTMACRequestResult")
.Elements(a + "response")
.Elements(a + "message")
select s).First().Value;
答案 0 :(得分:2)
您的<BTMACRequestResponse>
元素有一个默认命名空间,因此在匹配第一个元素时必须考虑它:
XNamespace ns = "http://wholesale.fluidata.co.uk/bt";
XNamespace a = "http://wholesale.fluidata.co.uk/bt/BTMacResponse";
XNamespace b = "http://schemas.datacontract.org/2004/07/DataLayer";
var output = PostToFluidataBTWebservice.MacRequest(number, serviceID)
.Descendants(ns + "BTMACRequestResponse")
.Elements(ns + "BTMACRequestResult")
.Elements(a + "response")
.Elements(b + "message")
.First().Value;
答案 1 :(得分:1)
这对我有用:
XDocument doc = XDocument.Load("test.xml");
XNamespace a = @"http://wholesale.fluidata.co.uk/bt/BTMacResponse";
XNamespace b = @"http://schemas.datacontract.org/2004/07/DataLayer";
XNamespace g = "http://wholesale.fluidata.co.uk/bt";
var output = (from s in doc.Descendants(g+ "BTMACRequestResponse")
.Elements(g+"BTMACRequestResult")
.Elements(a + "response")
.Elements(b + "message")
select s).First().Value;
答案 2 :(得分:0)
尝试纠正这些行:
.Elements(a + ":response")
.Elements(b + ":message")