我有这个XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<cteProc xmlns="http://www.portalfiscal.inf.br/cte" versao="1.04">
<CTe>
<emit>
<xFant>DOW</xFant>
<CNPJ>456789</CNPJ>
</emit>
<rem>
<CNPJ>777777</CNPJ>
<nCFOP>7101</nCFOP>
</rem>
</CTe>
<protCTe versao="1.04">
</cteProc>
要阅读此文件,请使用此C#代码段:
string
XmlTextReader reader = new XmlTextReader(@"C:\Conhecimento\158_v01.04-rocCTe.xml");
XmlNodeType type;
while (reader.Read())
{
type = reader.NodeType;
if (type == XmlNodeType.Element)
{
if (reader.Name == "xFant")
{ reader.Read(); XFant = reader.Value; textBox1.Text = XFant;}
if (reader.Name == "nCFOP")
{ reader.Read(); nCFOP = reader.Value; textBox2.Text = nCFOP;}
}
}
代码运行良好,但在子节点<CNPJ>
的情况下不起作用;它只读取第一个。如何编写此代码来读取后代?我尝试过类似rem.CNPJ
的内容。
从其他提问中我看到这段代码:
字符串CNPJ2,CNPJ3;
XNamespace ns = "http://www.portalfiscal.inf.br/cte";
var todas = from ide in XElement.Load(@"C:\136_v01.04.xml").Descendants(ns + "ide")
select new { CNPJ1 = (string)ide.Element(ns + "CNPJ") };
var emit = from ide1 in XElement.Load(@"C:\136_v01.04.xml").Descendants(ns + "emit")
select new { CNPJ2 = (string)ide1.Element(ns + "CNPJ") };
但如何将“todas”分配给单个变量像int CNPJ
答案 0 :(得分:1)
如果您使用XDocument读取您的xml
XDocument XMLDoc = XDocument.Load([path to xml file]);
你有一个Descendants(XName)
可以用来获取你所追求的节点。
XElement element = XMLDoc.Descendants("CNPJ").FirstOrDefault();