我使用三种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 第二个问题是我如何从“值”中获取相同标签中的值???
由于
答案 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
属性以字符串形式获取值。