【发布时间】:2014-11-25 04:04:43
【问题描述】:
我需要获取用户ID对应的终端ID。任何帮助。但它给出了错误:
节点类型不支持 ReadElementContentAsString 方法 没有。第 1 行,位置 668。
string strTerminalId = "E";
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(STRING); //
string strxml = xdoc.OuterXml;
string strUserName = "";
bool Flag = false;
using (XmlReader reader = XmlReader.Create(new StringReader(strxml)))
{
while (reader.Read())
{
if (reader.IsStartElement())
{
switch (reader.Name)
{
case "Row":
reader.Read();
if (Flag == false)
{
reader.ReadToFollowing("TERM-ID");
reader.Read();
string strTERMID = reader.ReadElementContentAsString().ToString();
if (strTERMID == strTerminalId)
{
while (reader.ReadToFollowing("NA") && (Flag == false))
{
reader.Read();
string strUser = reader.ReadContentAsString();
if (strUser == "NA")
{
reader.ReadToFollowing("c:value");
reader.Read();
strUserName = reader.ReadContentAsString();
Flag = true;
}
}
}
}
break;
}
}
}
XML 文档的内容是
<GetReferenceTableResponse xmlns='http://tempuri.org/'>
<GetReferenceTableResult>
<Table Name='C' ID='46899' xmlns=''>
<Columns>
<Col ID='7442' Name='TD' Datatype='T' Length='8' AttributeDescription='Terminal ID' IsKey='Y'/>
<Col ID='7443' Name='D' Datatype='T' Length='50' AttributeDescription='Description' IsKey=' '/>
<Col ID='7444' Name='U' Datatype='T' Length='8' AttributeDescription='USER-ID' IsKey='' />
</Columns>
<Rows>
<Row RowsetID=\"1\">
<TERM-ID ID='279598'>A</TERM-ID>
<DESC-TXT ID='279622'>ASC</DESC-TXT>
<USER-ID ID='279646'>A</USER-ID>
</Row>
</Rows>
</Table>
</GetReferenceTableResult>
</GetReferenceTableResponse>
【问题讨论】:
-
错误是什么?请编辑您的问题,提供更多详细信息,并最好在 using 语句中提供所有代码 (
using (XmlReader reader) -
使用
XmlReader解析xml文档效率非常低。您是否考虑使用XDocument或XPath?只需几行代码;还是你必须坚持XmlReader? -
@kennyzx - “低效”是一个有趣的术语,表示使用网络中的类解析 XML 的最快方式。比 XDocument/XmlDocument 更难正确 - 确实...
-
@AlexeiLevenkov 好,可以帮助我选择单词,也许是冗长的?当我输入高效时,我的意思是“使用更少的代码”,而不是“最高性能”。
-
您对性能的考虑是什么? @Alexei 是正确的,XMLReader 是更好的性能选择。但如果不是这种情况,您可以使用 LINQ。更容易和可读的结构。