gpt4 book ai didi

c# - 不用 Linq 解析和访问 XML

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:20 29 4
gpt4 key购买 nike

<分区>

我正在使用一个允许 XML 但不允许 Linq 的平台,所以我将不得不在没有 XElement 和 XDocument 的情况下解析 XML,那么我应该使用什么来代替这两个?我还找到了一个代码,如果有人能告诉我如何转换它

// parse the document (this is your doc but I've made the xml parseable)
var doc = XDocument.Parse(@"<chars>
<character name=""MyChar1"">
<skill1 type=""attack"" damage=""30"">
description of skill1
<name>Skill name</name>
<class1 type=""The Class Type""></class1>
<class2 type=""The Class Type 2""></class2>
</skill1>
</character>
<character name=""MyChar2"">
<skill1 type=""attack"" damage=""30""></skill1>
</character>
</chars>");

// Access a skill1 type(attribute) where the name(attribute) is "MyChar"
// this is pretty easy with LINQ. We first get all descendant nodes of type "character"
var skillWhereNameIsMyChar1 = doc.Descendants("character")
// then take the single one with an attribute named "value"
.Single(ch => ch.Attribute("name") != null && ch.Attribute("name").Value == "MyChar1")
// and take that element's child element of type skill1
.Element("skill1");
// this will print <skill1 ... /skill1>. However, this is an XElement object, not a string
// so you can continue to access inner text, attributes, children etc.
Console.WriteLine(skillWhereNameIsMyChar1);

// 2. Access the description of skill1 where name(att) is "MyChar1"
// this is tricky because the description text is just floating among other tags
// if description were wrapped in <description></description>, this would be simply
// var description = skillWhereNameIsMyChar1.Element("description").Value;
// here's the hacky way I found to get it in the current xml:

// first get the full value (inner text) of the skill node (includes "Skill Name")
var fullValue = skillWhereNameIsMyChar1.Value;
// then get the concatenated full values of all child nodes (= "Skill Name")
var innerValues = string.Join("", skillWhereNameIsMyChar1.Elements().Select(e => e.Value));
// get the description by dropping off the trailing characters that are actually inner values
// by limiting the length to the full length - the length of the non-description characters
var description = fullValue.Substring(0, length: fullValue.Length - innerValues.Length);
Console.WriteLine(description);

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com