Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#读取XML标记_C#_Xml - Fatal编程技术网

C#读取XML标记

C#读取XML标记,c#,xml,C#,Xml,我有xml文件,我想读取特定标记的内容。 我知道如何阅读姓名标签的内容,但我有地址标签。 事情是这样的: <name>ANdrew</name> <phone>456778</phone> <address>Wooden street</address> <name>John</name> <phone>758465</phone> <age>45</age&

我有xml文件,我想读取特定标记的内容。 我知道如何阅读姓名标签的内容,但我有地址标签。 事情是这样的:

<name>ANdrew</name>
<phone>456778</phone>
<address>Wooden street</address>
<name>John</name>
<phone>758465</phone>
<age>45</age>
<address>Steel street</address>
安德鲁 456778 木街 约翰 758465 45 钢铁街 所以地址标签总是在名字标签之后,但是在它们之间有一个电话标签或者一些其他标签,比如年龄。。。。
现在我需要一个循环,它将遍历整个文件并收集所有名称和地址。我不知道如何在这个循环中关联名称和地址……

如果您有这样的xml:

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

约翰
史密斯
詹姆斯
白色

您可以使用以下代码:

    XmlDocument xml = new XmlDocument();
xml.LoadXml(myXmlString); // suppose that myXmlString contains "<Names>...</Names>"

XmlNodeList xnList = xml.SelectNodes("/Names/Name");
foreach (XmlNode xn in xnList)
{
  string firstName = xn["FirstName"].InnerText;
  string lastName = xn["LastName"].InnerText;
  Console.WriteLine("Name: {0} {1}", firstName, lastName);
}
xmldocumentxml=newxmldocument();
LoadXml(myXmlString);//假设myXmlString包含“…”
XmlNodeList xnList=xml.SelectNodes(“/Names/Name”);
foreach(xnList中的XmlNode xn)
{
字符串firstName=xn[“firstName”]。InnerText;
字符串lastName=xn[“lastName”].InnerText;
WriteLine(“名称:{0}{1}”,firstName,lastName);
}

使用XPath选择所需的节点

var nodes = document.SelectNodes("//root/name")

您可以对address执行相同的操作,然后迭代节点集合

我通过数据集或数据表集合读取xml文档。

string xmlPath=“C:\blabla.xml”
StreamReader streamRead=新的StreamReader(xmlPath)
byte[]fullByte=Encoding.ASCII.GetBytes(streamRead.ReadToEnd())
DataSet数据集=新数据集()
MemoryStream mStream=新的MemoryStream(全字节)
dataSet.ReadXml(mStream)

您可以使用Linq to XML查询它(尽管此XML的格式应该不同):

stringxml=@”
安德鲁
456778
木街
约翰
758465
45
钢铁街
";
XDocument doc=XDocument.Parse(xml);
var name=doc.Root.Elements(“name”).Select(n=>n.Value);
var addresses=doc.Root.Elements(“地址”)。选择(a=>a.Value);
var results=names.Zip(addresses,(name,address)=>name+“具有以下地址:“+address”);
foreach(结果中的var r)
控制台。写入线(r);//安德鲁有以下地址:伍德街
//约翰有以下地址:钢铁街

使用LINQ to XML,您可以选择
名称
元素,然后访问
ElementsAfterSelf(“地址”)。首先()

            XDocument doc = XDocument.Parse(@"<root><name>ANdrew</name>
<phone>456778</phone>
<address>Wooden street</address>
<name>John</name>
<phone>758465</phone>
<age>45</age>
<address>Steel street</address>
</root>");
            foreach (XElement name in doc.Root.Elements("name"))
            {
                Console.WriteLine("{0}: {1}", (string)name, (string)name.ElementsAfterSelf("address").First());
            }
XDocument doc=XDocument.Parse(@“ANdrew”)
456778
木街
约翰
758465
45
钢铁街
");
foreach(doc.Root.Elements中的XElement名称(“名称”))
{
WriteLine(“{0}:{1}”,(string)name,(string)name.ElementsAfterSelf(“address”).First();
}

当然,如果您有一个XML文件,请使用
XDocument.Load(“input.XML”)
而不是
Parse

好的,我明白了,它看起来不错,但是如果我的XML中没有父标记,它会工作吗?所以我没有名字,也没有名字。xml文件中的标记就像我没有显示父标记一样..好的,所以我将在var节点中显示所有名称,在var节点2中显示所有地址,但是我如何知道哪个地址属于哪个名称?您还可以使用条件if/else。例如,如果节点类型是地址,则执行某些操作
            XDocument doc = XDocument.Parse(@"<root><name>ANdrew</name>
<phone>456778</phone>
<address>Wooden street</address>
<name>John</name>
<phone>758465</phone>
<age>45</age>
<address>Steel street</address>
</root>");
            foreach (XElement name in doc.Root.Elements("name"))
            {
                Console.WriteLine("{0}: {1}", (string)name, (string)name.ElementsAfterSelf("address").First());
            }