在ASP.NET中读取XML文件时出现问题

时间:2011-06-24 21:11:38

标签: .net asp.net xml xmlreader

我在以下文件结构上使用了一个简单的XmlReader:

<application>
    <nodetitle permission="perm1">Some Dept</nodetitle>
    <project>Project A</project>
    <links>
        <link>
            <pagename>page1.aspx</pagename>
        </link>
        <link>
            <pagename permission="perm2">page2.aspx</pagename>
        </link>
        <link>
            <pagename>page3.aspx</pagename>
        </link>
    </links>
</application>

我在XML API上生锈了,我的问题是阅读兄弟&lt; link&gt;单一传递中的元素 - 我的本能是寻找创造某种内循环?

while (reader.Read())
{
    ...

    if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "links"))
    {
        // read all <link> elements in a single pass
    }
    ...
}

更新 - 06-25-2011

我会尝试更具体一点。我没有使用XPath。使用XmlReader 或Linq to Xml (我完全不熟悉),我想要一种方法来提取链接元素和属性并检查它们的值。

3 个答案:

答案 0 :(得分:4)

LINQ to XML使这个东西变得简单易用:

XDocument doc = XDocument.Parse("xml here or use .Load()");
var links = doc.Descendants("link");

您可以从这里逐个读取XNode上的属性(XAttribute),或者使用LINQ再次读取所有节点的所有属性等等。

答案 1 :(得分:3)

如果您使用XML文档,那么您可以执行以下操作:

XmlNodeList nodeList = xmlDocument
    .DocumentElement.SelectNodes("//application/links/link");

foreach (XmlNode node in nodeList) {
    ...
}

在循环中,只需获取内部<pageName>元素并读取属性和/或文本。

也就是说,XPath比阅读器或完整的Xml doc更容易,更快,内存效率更高。 Linq2XML也非常适合使用,因为您可以在解析树上使用Linq语法。

修改

我觉得有点脏,因为我提到了XmlDocument所以我创建了一个简单的Linq2Xml示例,以显示这甚至可以省略任何Linq语法,以防万一你想要它:

string path = @"C:\path\to\my\xmlfile.xml";
XDocument doc = XDocument.Load(path, LoadOptions.None);

var nodes = doc.Root.Element("links").Elements("link");
foreach (var node in nodes) {
    var pageNameElement = node.Element("pagename");
    XAttribute permAttribute = pageNameElement.Attribute("permission");
    string permission = "";
    if (permAttribute != null)
        permission = permAttribute.Value;
    string text = pageNameElement.Value;
    // Do something with the values...
}

您当然可以使用流初始化XDocument,如果这是您已有的。希望这会有所帮助:)

答案 2 :(得分:1)

虽然我不喜欢XmlReader而不是LINQ或XmlDocument, 这应该有助于你使用xmlReader(向下滚动) http://vbdotnetforum.com/index.php?/topic/493-creating-an-xml-reader/

-

U可能想使用LINQ,它不应该很难理解。这是一个启动器 http://www.developingfor.net/c-30/upgrade-your-c-skills-part-5-linq-to-xml.html