解析简单的XML文档,即使格式不正确?

尝试学习

成员
已加入
2018年3月13日
留言内容
12
编程经验
Beginner
我有两个问题,我很乐意提供任何帮助。我整个周末都在寻找解决此问题的方法。我们有一个需要读取的XML文件。它很小,只包含一个节点。但是,它的格式不正确(我们知道)。由于它是由另一个过程创建的,因此我们无能为力。我必须与我们所拥有的一起工作。

HTML:
<ServerRequest userKey="01223345671234123"  flag="ACTIVE" >
<raw>
TEST MESSAGE
</raw>
</ServerRequest>

而已。如您所见,它不包含根。我在网上看到的教程使用称为反序列化的过程,该过程需要主根目录。我已经考虑过将XML文件添加到"<root>"但我不知道该如何即时执行。我无法触摸原始文件。 我只需要其中的userKey,标志和TEST MESSAGE。我该如何提取呢?

我还有一个问题与理论/最佳实践有关。如您所见,该文件很小(一个节点)。就像上面一样,它位于一个包含约100个文件的文件夹中。 我的目标是让我的程序遍历每个文件并读取文件中的一个节点,并将其放入树状视图中。您认为我应该创建对象数组吗?使用基本数组?哎呀,SQL DB?只是寻找正确方向的推动力。

任何帮助是极大的赞赏。

 
Last edited:

尝试学习

成员
已加入
2018年3月13日
留言内容
12
编程经验
Beginner
如果有人感兴趣,我可以使用它。有点丑陋,但是可以读取格式错误的XML:

C#:
[COLOR=blue]string[/COLOR] text = System.IO.[COLOR=#2b91af]File[/COLOR].ReadAllText(filename);
         
           [COLOR=blue]var[/COLOR] startTag = [COLOR=#a31515]"userKey=\""[/COLOR];
           [COLOR=blue]int[/COLOR] startIndex = text.IndexOf(startTag) + startTag.Length;
           [COLOR=blue]int[/COLOR] endIndex = text.IndexOf([COLOR=#a31515]"\""[/COLOR], startIndex);
          [COLOR=blue]return[/COLOR] text.Substring(startIndex, endIndex - startIndex);
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,051
地点
挪威
编程经验
10+
如您所见,它不包含根。
ServerRequest是根节点。
var doc = XDocument.Load(filename);
var value = doc.Root.Attribute("userKey").Value;
 

尝试学习

成员
已加入
2018年3月13日
留言内容
12
编程经验
Beginner
ServerRequest是根节点。
var doc = XDocument.Load(filename);
var value = doc.Root.Attribute("userKey").Value;

你。是。惊人的。谢谢! ::p 我们为您提供电晕::
 

尝试学习

成员
已加入
2018年3月13日
留言内容
12
编程经验
Beginner
在那次电晕之前,我可以麻烦您协助我获取RAW数据吗?我是如此亲密:

C#:
[LEFT][COLOR=#333333][COLOR=blue]var[/COLOR] node = doc.Descendants().Where(n => n.Name == [COLOR=#a31515]"raw"[/COLOR]).FirstOrDefault();
[/COLOR][/LEFT]

它可以工作,但是有一个小错误。 * CERTAIN *文件将在标志后面包含一个额外的属性,即"xmls":

C#:
[LEFT][COLOR=#000080][FONT=monospace]<ServerRequest userKey=[COLOR=#0000FF]"01223345671234123"[/COLOR]  flag=[COLOR=#0000FF]"ACTIVE"[/COLOR] [/FONT][/COLOR][/LEFT]xmlns="org">

XML格式NS一词破坏了程序。对于不包含该属性的文件,我可以看到RAW的内部文本。对于具有该属性的文件,请使用nada!
 
Last edited:

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,051
地点
挪威
编程经验
10+
xmlns是xml名称空间。这在两种情况下都应该起作用:
var ns = doc.Root.GetDefaultNamespace();
var raw = doc.Descendants(ns + "raw").First().Value;
 
最佳 底部