我有点陷入使用XPath或LINQ获取从XML打印的值也是XPath和XML Parsing的新功能, 看看这里的几个例子,但没有任何帮助,因为他们都有不同的属性名称的XML,对于我的情况XML是不同的:
<select name="event" ng-model="data.eventID" ng-options="event as event.name for event in events track by event.eventID">
<option value="0">--- Please select ---</option>
</select>
它具有相同的属性<select name="event" ng-model="data.eventID" ng-options="event as event.name for event in events track by event.eventID" class="ng-pristine ng-untouched ng-valid">
<option value="?" selected="selected"></option>
<option value="2" label="My Event">My Event</option>
</select>
但不同的<Entities TotalResult="3">
<Entity Type="test-set-folder">
<Fields>
<Field Name="id">
<Value>12457</Value>
</Field>
<Field Name="parent-id">
<Value>0</Value>
</Field>
<Field Name="last-modified">
<Value>2015-03-09 14:09:57</Value>
</Field>
<Field Name="description">
<Value/>
</Field>
<Field Name="view-order"/>
<Field Name="name">
<Value>.NET</Value>
</Field>
</Fields>
</Entity>
<Entity Type="test-set-folder">
<Fields>
<Field Name="id">
<Value>15487</Value>
</Field>
<Field Name="parent-id">
<Value>0</Value>
</Field>
<Field Name="last-modified">
<Value>2015-03-15 13:00:02</Value>
</Field>
<Field Name="description">
<Value/>
</Field>
<Field Name="view-order"/>
<Field Name="name">
<Value>Python</Value>
</Field>
</Fields>
</Entity>
</Entities>
。
有人可以帮我打印Field
属性及其Name
。
我需要遍历每个实体并打印其Name
。
到目前为止,我尝试过使用Xpath和LINQ:
Value
但严重的是我不太了解它,所以我的方法完全错了。
我的预期输出是:
Name : Value
和下一个实体相同。
答案 0 :(得分:2)
由于某些Fields缺少Value元素,您可以尝试这样做:
XElement element = XElement.Load("XmlFile.xml");
var query = from field in element.Descendants("Field")
select new
{
NameAttribute = field.Attribute("Name").Value,
Value = field.Descendants("Value").Any() ?
field.Element("Value").Value : "No Value"
};
var namesAndValues = query.ToList()
答案 1 :(得分:1)
您有一个数据透视表,因为您的数据是从两个标记(名称和值)中提取的。这是一种解析xml的方法
Sub GetEAddress()
Dim c
Dim Fin As Range
Dim SearchRangeS1, SearchRangeS2
Dim i As Integer '<-- Newly added
Set SearchRangeS1 = Sheet1.Range("A1:A" & Sheet1.Cells(Rows.Count, 1).End(xlUp).Row)
Set SearchRangeS2 = Sheet2.Range("A1:A" & Sheet2.Cells(Rows.Count, 1).End(xlUp).Row)
Sheet3.Cells.Clear
Sheet3.Range("H1") = "Name"
Sheet3.Range("I1") = "Email_ID"
i = Sheet3.Cells(Rows.Count, 1).End(xlUp).Row + 1 '<-- Newly added
For Each c In SearchRangeS2
Set Fin = Nothing
Set Fin = SearchRangeS1.Find(c.Value, LookAt:=xlWhole)
If Not Fin Is Nothing Then
With Sheet3.Range("H" & i) '<-- Changed here
.Value = c
.Offset(0, 1).Resize(, 8).Value = c.Offset(0, 1).Resize(, 8).Value
i = i + 1 '<-- Newly added
End With
End If
Next c
End Sub
答案 2 :(得分:0)
您只需要遵循xml的结构
未经测试的代码:
Mano Negra - Amerika Perdida - 01 - Mano Negra.mp3
Mano Negra - Amerika Perdida - 02 - Mala Vida.mp3
Mano Negra - Amerika Perdida - 03 - Amerika Perdida.mp3
Mano Negra - Amerika Perdida - 04 - Peligro.mp3
[etc...]
答案 3 :(得分:0)
试试这个
var names = from r in document.Descendants("Entities")
.Descendants("Entity")
.Descendants("Fields")
.Descendants("Field")
select new
{
Name = r.Element("name").Value,
};
foreach (var n in names)
{
Console.WriteLine(n.Name);
}