<?xml version="1.0" encoding="utf-8" ?>
<Document>
<State Code="A" Type="B">
<Info>
<FirstName ripName="Hello"></FirstName>
<LastName ripName="Word"></LastName>
</Info>
</State>
</Document>
对于这个xml我试图使用linq获取FirstName属性值,如下面的代码片段,但我得到null。
IEnumerable<XElement> a1 = xmlData.Elements("State").Where(c => c.Attribute("Code").Value.Equals("A") && c.Attribute("Type").Value.Equals("B"))
.Elements("Info");
var x1 = a1.Select(x => x.Element("FirstName").Attribute("ripName")).FirstOrDefault();
x1为空,请建议。
答案 0 :(得分:1)
如果我认为xmlData是一个加载了您显示的xml的XDocument,那么主要问题在于:library(data.table)
setDT(df)[, as.list(penultimate(unlist(.SD))), .(rn= 1:nrow(df))][, rn := NULL][]
为空。如果您想要“状态”元素,则应使用xmlData.Elements("State")...
。
并选择属性值,如下所示:
xmlData.Descendants("State")
或者
var x2 = a1.Select(x => x.Element("FirstName").Attribute("ripName")).FirstOrDefault().Value;
答案 1 :(得分:0)
在VB中,如果我理解你想要做什么,它会是这样的,
Dim xe As XElement
'to load from file
' xe=XElement.Load("your path here")
'to test
xe = <Document>
<State Code="A" Type="B">
<Info>
<FirstName ripName="Hello"></FirstName>
<LastName ripName="World"></LastName>
</Info>
</State>
</Document>
Dim ie As IEnumerable(Of XElement)
ie = From el In xe.Elements
Where el.@Code = "A" AndAlso el.@Type = "B"
From sel In el.<Info>.Elements
Where sel.Name.LocalName = "FirstName"
Select sel Take 1
Dim attrRN As XAttribute
If ie.Count = 1 Then
attrRN = ie.FirstOrDefault.Attribute("ripName")
Debug.WriteLine(attrRN.Value)
End If
这当然假设您已经给出了XML的准确描述。