程序接受一个XML输入字符串,并从中获取所有节点值3.

这是我的要求: 编写一个程序,接受XML输入字符串并从中获取所有节点值。使用命名空间System.XML(不要使用System.XML.Linq)。程序接受一个XML输入字符串,并从中获取所有节点值3.

Display &节点值由空格分隔。

例子:如果输入字符串包含以下字符串:

<Names> <Name> <FirstName>John</FirstName> <LastName>Smith</LastName</Name> 

<Name><FirstName>James</FirstName> <LastName>White</LastName></Name></Names>

显示输出: 约翰·史密斯詹姆斯·怀特

创建一个类名为UserProgramCode具有以下静态方法 公共静态字符串getnodeByName(字符串输入1) 创建一个名为Program的类,它接受输入并调用UserProgramCode中存在的静态方法。

而我的代码是

using System;使用System.Xml的 ;

public class Program{ 

public static void Main(){

string xmlinput=Console.ReadLine();

UserProgramCode.getnodeByName(xmlinput);

}

}

public class UserProgramCode{

static string ResultName;

public static string getnodeByName(string input1)

{

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.LoadXml(input1);

string xpath ="Names/Name";

var nodes = xmlDoc.SelectNodes(xpath);

foreach (XmlNode childrenNode in nodes)

{

UserProgramCode.ResultName=childrenNode.SelectSingleNode("/FirstName").InnerText +" "+ childrenNode.SelectSingleNode("/LastName").InnerText;

}

return UserProgramCode.ResultName;

}

}

但我得到空引用Exception.I不知道如何解决这个问题。请帮忙 。我是C#.net的新手。

约翰·史密斯詹姆斯怀特 未处理的异常: System.NullReferenceException:0 在程序:对象没有在UserProgramCode.getnodeByName(System.String输入1)[0x00000]在设置到对象 的一个实例。 Main()[0x00000] in:0 [ERROR] FATAL UNHANDLED EXCEPTION:System.NullReferenceException:对象引用未设置为对象实例 UserProgramCode.getnodeByName(System.String input1)[0x00000] in:0 at Program.Main()[0x00000] in:0

回答:

我在这里看到多个问题:

  1. 你输入XML的格式不正确。您应该尝试捕获,而LoadXml作为用户可以输入任何内容来破坏您的代码。 Smith</LastName>”已丢失。

  2. /前面的节点名称/FirstName将使它从当前节点的根开始搜索。

  3. 指定给ResultName只会保留最后一个节点的名和姓,并放弃所有其他节点。

  4. 使用字符串连接会导致浪费的堆。

  5. 命名约定与C#标准不匹配。

更新的样本:

public class UserProgramCode 

{

static StringBuilder resultName = new StringBuilder();

public static string GetNodeByName(string input1)

{

XmlDocument xmlDoc = new XmlDocument();

try

{

xmlDoc.LoadXml(input1);

}

catch (XmlException xe)

{

Console.WriteLine("Input XML is not parseable. " + xe.Message);

}

string xpath = "Names/Name";

var nodes = xmlDoc.SelectNodes(xpath);

foreach (XmlNode childrenNode in nodes)

{

resultName.AppendLine(childrenNode.SelectSingleNode("FirstName").InnerText + " " + childrenNode.SelectSingleNode("LastName").InnerText);

}

return resultName.ToString();

}

}

以上是 程序接受一个XML输入字符串,并从中获取所有节点值3. 的全部内容, 来源链接: utcz.com/qa/260028.html

回到顶部