从XML读取第一个根节点

时间:2013-03-28 19:19:42

标签: c# visual-studio-2010 visual-studio

我使用三种XML文件:

A型:

<?xml version="1.0" encoding="UTF-8"?>
<nfeProc versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">
</nfeProc>

Tyepe B:

<?xml version="1.0" encoding="UTF-8"?>
<cancCTe xmlns="http://www.portalfiscal.inf.br/cte" versao="1.04">
</cancCTe>

C型:]

<?xml version="1.0" encoding="UTF-8"?>
<cteProc xmlns="http://www.portalfiscal.inf.br/cte" versao="1.04">
</cteProc>

我已尝试使用此代码读取第一个节点:

     XmlDocument xmlDoc = new XmlDocument();
     xmlDoc.Load(@"C:\crruopto\135120068964590_v01.04-procCTe.xml");
     XmlNodeList ml = xmlDoc.GetElementsByTagName("*");
     XmlElement root = xmlDoc.DocumentElement;
     exti = root.ToString();

但是不要返回任何我想要读取的第一个节点,需要知道文件是否为nfeProc,canCTE或cteProc 第二个问题是我如何从“值”中获取相同标签中的值???

由于

6 个答案:

答案 0 :(得分:3)

来自this帖子:

//Root node is the DocumentElement property of XmlDocument

XmlElement root = xmlDoc.DocumentElement

//If you only have the node, you can get the root node by

XmlElement root = xmlNode.OwnerDocument.DocumentElement

答案 1 :(得分:1)

我建议使用XPath。这是一个示例,我从本地存储的字符串中读取XML内容,并选择根目录下的第一个节点:

XmlDocument doc = new XmlDocument();
doc.Load(new StringReader(xml));

XmlNode node = doc.SelectSingleNode("(/*)");

答案 2 :(得分:0)

如果您不需要使用XmlDocument内容,那么Linq就是您的朋友。

XDocument doc = XDocument.Load(@"C:\crruopto\135120068964590_v01.04-procCTe.xml");
XElement first = doc.GetDescendants().FirstOrDefault();
if(first != null)
{
  //first.Name will be either nfeProc, canCTE or cteProc.
}

答案 3 :(得分:0)

使用Linq to XML是在.NET中使用XML的最新和最强大的方法,并且比XmlDocument和XmlNode提供了更多的功能和灵活性。

获取根节点非常简单:

XDocument doc = XDocument.Load(@"C:\crruopto\135120068964590_v01.04-procCTe.xml");
Console.WriteLine(doc.Root.Name.ToString());

构建XDocument后,您不需要使用任何LINQ查询或特殊检查。您只需从XDocument中提取Root属性。

答案 4 :(得分:0)

谢谢我已经用这种方式解决了第一部分

   XmlDocument xmlDoc = new XmlDocument();
   xmlDoc.Load(nomear);
   XmlNodeList ml = xmlDoc.GetElementsByTagName("*");
   XmlNode primer = xmlDoc.DocumentElement;
   exti = primer.Name;  

答案 5 :(得分:0)

首先,需要明确的是,您要询问的是根元素 而不是根 node

您可以使用XmlReader避免将大型文档完全加载到内存中。请参阅我关于如何在https://stackoverflow.com/a/60642354/1307074中找到根元素的答案。

第二,一旦阅读器引用了元素,就可以使用阅读器的Name属性来获取元素的合格标记名。您可以使用Value属性以字符串形式获取值。