我有一个XML文件,我试图从这里读取,并具有以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
namespace XML
{
class Program
{
static void Main(string[] args)
{
XmlTextReader textReader = new XmlTextReader("secLendingXML.cfm.xml");
while (textReader.Read())
{
switch (textReader.NodeType)
{
case XmlNodeType.Element:
Console.WriteLine(textReader.Name);
Console.WriteLine(textReader.Value);
break;
case XmlNodeType.Text:
Console.WriteLine(textReader.Value);
break;
case XmlNodeType.XmlDeclaration:
case XmlNodeType.ProcessingInstruction:
Console.WriteLine(textReader.Name + " " + textReader.Value);
break;
case XmlNodeType.Comment:
Console.WriteLine(textReader.Value);
break;
case XmlNodeType.EndElement:
break;
}
}
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码在正在读取节点并返回名称的意义上正常工作.但是,问题是我正在尝试检索节点内的数据.换句话说,当它在测试部分之后读取第一部分时,它将显示为:
slnc:DataSet
slnc:Group
slnc:Section
slnc:ActualAvailableToBorrow
*** here ***
slnc:oustandingLoans
Run Code Online (Sandbox Code Playgroud)
这是我想的TextReader将在节点内像阅读下面的值
confidentiality="F"
,currency="USD"
等等,但它正好跳到下一个章节不读这些值!
<slnc:actualAvailableToBorrow xmlns:slnc="http://www.newyorkfed.org/xml/schemas/SecLending"
confidentiality="F" currency="USD" decimals="0" method="AA"
multiplier="5" securityLendingType="AA" status="A" value="1474"/>
Run Code Online (Sandbox Code Playgroud)
如何让文本阅读器读取属性值?打印值"currency",然后打印它的值:"F",依此类推.
JDB*_*JDB 47
使用XmlTextReader.GetAttribute(MSDN)
case XmlNodeType.Element:
Console.WriteLine(textReader.Name);
Console.WriteLine(textReader.Value);
Console.WriteLine(textReader.GetAttribute("currency"));
Run Code Online (Sandbox Code Playgroud)
这个函数的一个很好的特性:如果没有定义属性,它不会导致异常 - 它只会返回Null
.
使用XmlTextReader.MoveToAttribute(MSDN)
将AttributeCount属性与MoveToAttribute结合使用:
case XmlNodeType.Element:
Console.WriteLine(textReader.Name);
Console.WriteLine(textReader.Value);
for (int attInd = 0; attInd < textReader.AttributeCount; attInd++){
textReader.MoveToAttribute( attInd );
Console.WriteLine(textReader.Name);
Console.WriteLine(textReader.Value);
}
textReader.MoveToElement();
Run Code Online (Sandbox Code Playgroud)
gho*_*ord 16
您可以稍微更改循环条件,以便它也遍历属性:
while (textReader.MoveToNextAttribute() || textReader.Read())
{
switch (textReader.NodeType)
{
case XmlNodeType.Element:
Console.WriteLine(textReader.Name);
Console.WriteLine(textReader.Value);
break;
//...
case XmlNodeType.Attribute:
//use textReader.Name and textReader.Value here for attribute name and value
break;
}
}
Run Code Online (Sandbox Code Playgroud)
MoveToNextAttribute
reader将reader升级到current元素中的下一个属性,如果不能,则返回false.
归档时间: |
|
查看次数: |
48769 次 |
最近记录: |