我有一个
.xml
文件,其中包含角色的信息。我正在尝试获取节点和属性的名称和值。我尝试过使用 XmlReader
,但它不起作用,而且我无法获取特定节点的值和名称。
.InnerText
的问题是它返回每个子节点的信息,而我只想获取该特定节点的信息。
此外,我还无法获取
PartNumber
属性的值。
这是 XML 文档:
<Character ID="11000">
<HP>100</HP>
<Name>name</Name>
<BodyParts>
<BodyPart PartNumber="1">LArm</BodyPart>
<BodyPart PartNumber="2">RArm</BodyPart>
<BodyPart PartNumber="3">Head</BodyPart>
<BodyPart PartNumber="4">Body</BodyPart>
<BodyPart PartNumber="5">RLeg</BodyPart>
<BodyPart PartNumber="6">LLeg</BodyPart>
</BodyParts>
</Character>
这是我的代码:
static XmlDocument doc = new XmlDocument();
public static void F()
{
foreach(string FilePath in Directory.GetFiles("XML.Resources/Characters"))
{
doc.Load(FilePath);
foreach(XmlNode Node in doc.ChildNodes)
{
Console.WriteLine(Node.InnerText);
foreach(XmlAttribute Atributo in Node.Attributes)
{
Console.WriteLine(Atributo.Name);
Console.WriteLine(Atributo.Value);
}
}
}
}
这是需要时的输出:
100nameLArmRArmHeadBodyRLegLLeg
ID
11000
一个很好的候选者是
System.Xml.Linq
。这是控制台例程中的示例迭代,它将为您提供一些有关在迭代时提取元素的见解。
using System.Xml.Linq;
string testData = @"
<Character ID=""11000"">
<HP>100</HP>
<Name>name</Name>
<BodyParts>
<BodyPart PartNumber=""1"">LArm</BodyPart>
<BodyPart PartNumber=""2"">RArm</BodyPart>
<BodyPart PartNumber=""3"">Head</BodyPart>
<BodyPart PartNumber=""4"">Body</BodyPart>
<BodyPart PartNumber=""5"">RLeg</BodyPart>
<BodyPart PartNumber=""6"">LLeg</BodyPart>
</BodyParts>
</Character>";
Console.Title = "Xml Linq Iteration";
var xroot = XElement.Parse(testData);
foreach (var xel in xroot.DescendantsAndSelf())
{
var shallowCopy = new XElement(xel);
var value = (xel.Nodes().FirstOrDefault() is XText xText)
? $"'{xText}'"
: null;
shallowCopy.RemoveNodes();
var attrDisplay = string.Join(string.Empty, xel.Attributes().Select(_ => _.ToString()));
Console.WriteLine(
$"{shallowCopy.Name} {value} {attrDisplay}");
}
Console.ReadKey();