gpt4 book ai didi

c# - 使用没有元素名称的 Linq 读取 XML

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:25 24 4
gpt4 key购买 nike

我需要读取一个 XML 文件,我正在尝试使用 Linq,但在访问后代时遇到了一些问题。我需要能够在不知道元素名称的情况下获得后裔。这可能吗?

这是 XML:

<Root>
<myResponse>
<GUID></GUID>
<TType code="1">myTType Value
<TSubType tc="1">TSubType Value</TSubType>
</TType>
<TDate>1999-09-19</TDate>
<TTime>16:00:00.0Z</TTime>
</myResponse>
</Root>

这是我的代码:

using (XmlReader nodeReader = XmlReader.Create(@"C:\Projects\GetXML\Test2.xml"))

{
nodeReader.MoveToContent();

XDocument xRoot = XDocument.Load(nodeReader, LoadOptions.SetLineInfo);


foreach (XElement e in xRoot.Elements("Root").DescendantsAndSelf())
Console.WriteLine("{0}{1}{2}",
("".PadRight(e.Ancestors().Count() * 2) + e.Name).PadRight(20), " = " ,
(e.Value).PadRight(5));


}

我的结果:

Root                 = 


myTType Value
TSubType Value

1999-09-19
16:00:00.0Z


myResponse =

myTType Value
TSubType Value

1999-09-19
16:00:00.0Z

GUID =
TType = myTType Value
TSubType Value

TSubType = TSubType Value
TDate = 1999-09-19
TTime = 16:00:00.0Z

我的期望:

Root                 = 
myResponse =

GUID =
TType = myTType Value
TSubType = TSubType Value
TDate = 1999-09-19
TTime = 16:00:00.0Z

最佳答案

而不是使用 e.Value ,尝试使用:

string.Concat(e.Nodes().OfType<XText>().Select(t => t.Value)) .

您还可以使用:

e.Nodes().OfType<XText>().FirstOrDefault().Value

但是你可能得不到所有的文本(如果它是分开的)。例如:

<Root>
<myResponse>
<GUID></GUID>
<TType code="1">myTType Value
<TSubType tc="1">TSubType Value</TSubType>
Some more text
</TType>
<TDate>1999-09-19</TDate>
<TTime>16:00:00.0Z</TTime>
</myResponse>
</Root>

对于此 XML,第一段代码还将包含“更多文本”,而第二段则不会。

关于c# - 使用没有元素名称的 Linq 读取 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19184387/

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