我有一个很大的XMLTEXTREADER读取。
这是我的代码
while (reads.Read())
{
switch (reads.NodeType)
{
case XmlNodeType.Element:
{
if (reads.Name == "TITLE")
{
Response.Write("<Br />");
Intel = reads.ReadInnerXml();
}
Response.Write(Intel);
Intel = "";
}
break;
}
}
这适用于打印文档中的所有标记。现在我有一个名为Authors的标签,对于一些书籍,我有一个以上的作者。
所以我的XML看起来如下
<set1>
<title>Test </Title>
<intel_auth id="9">
<fname>ABC</fname>
<mname>M.</mname>
<lname>app</lname>
</intel_auth>
<intel_auth id="130">
<fname>Brad</fname>
<lname>e</lname>
</intel_auth_auth>
<intel_auth id="31">
<fname>Robin</fname>
<lname>neil</lname>
</intel_auth>
<intel_auth id="232">
<fname>Mason</fname>
<lname>Rodriguez</lname>
</intel_auth>
</set1>
我有多个套装,它打印所有标题,而不是打印旁边的作者姓名。
我使用下面的代码
case XmlNodeType.Element:
{
//string strURI = reads.NamespaceURI;
//string name = reads.Name;
string Authors = "";
if (reads.Name == "TITLE")
{
Response.Write("<Br />");
Intel = reads.ReadInnerXml();
if (reads.Name == "FNAME")
{
Authors += reads.Value;
}
if (reads.Name == "MNAME")
{
Authors += reads.Value;
}
if (reads.Name == "LNAME")
{
Authors += reads.Value;
}
}
Response.Write(Intel+Authors);
Intel = "";
Authors = "";
}
break;
答案 0 :(得分:0)
当调用ReadInnerXml时,它会将阅读器推进到关闭标记之后的下一个节点,因此您的代码永远不会看到作者名称节点。该方法的文档提供了详细信息。
尝试ReadStartElement将其放在intel_auth元素上。
答案 1 :(得分:0)
Xml区分大小写。更改所有比较以匹配xml的大小写。你的xml中的标题是title
和Title
,是吗?
如果你不介意,我可以帮你使用Linq:
我创建了一个名为Author的类(我正在使用这些扩展名:http://searisen.com/xmllib/extensions.wiki)
public class Author
{
XElement self;
public Author(XElement self) { this.self = self; }
public int Id { get { return self.Get("id", 0); } }
public string LastName { get { return self.Get("lname", string.Empty); } }
public string FirstName { get { return self.Get("fname", string.Empty); } }
public string MiddleName { get { return self.Get("mname", string.Empty); } }
public override string ToString()
{
return FirstName + MiddleName + LastName;
}
}
然后是一本书课:
public class Book
{
XElement self;
public Book(XElement self) { this.self = self; }
public Author[] Authors
{
get { return _Authors ?? // if _Authors is null, create it and then return it
(_Authors = self.GetEnumerable("intel_auth", xauthor => new Author(xauthor)).ToArray()); }
}
Author[] _Authors;
public string Title
{
get { return self.Get("title", string.Empty); }
}
}
我不确定如何从xml片段加载图书,但如果每本书都是set1
而set1
是文件根节点的节点...
Book[] books = XElement.Load("file.xml")
.GetEnumerable("set1", xbook => new Book(xbook))
.ToArray();
然后你可以遍历所有书籍,以及书中的所有作者:
foreach(Book book in books)
{
Response.Write(book.Title);
foreach(Author author in book.Authors)
{
Response.Write("<Br />" + author.ToString());
}
}