首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xml is XML是xml

xml is XML是xml
EN

Code Review用户
提问于 2017-10-16 15:03:56
回答 1查看 2.7K关注 0票数 10

我不得不为面试写一些代码,打印出每个节点的name属性。我一开始走错了方向,所以没能完成。我想完成代码的编写,所以我创建了我的控制台应用程序,类似于他们有一个按钮事件在做什么。请让我知道你对代码的看法和我能做得更好。

代码语言:javascript
复制
class XMLRecursionReader
{
    private StringBuilder _outputString = new StringBuilder();
    private XmlNode _root;

    public XMLRecursionReader(XmlDocument xDoc)
    {
        _root = xDoc.ChildNodes[1]; 
    }
    public string ReturnNameAsString (XmlNode node)
    {
        return node.Attributes["name"].InnerXml.ToString();
    }
    public void buildString (XmlNode node)
    {
        _outputString.AppendLine(ReturnNameAsString(node));
        if (node.HasChildNodes)
        {
            foreach (XmlNode childNode in node.ChildNodes)
            {
                buildString(childNode);
            }
        }
    }
    public void PrintOutput ()
    {
        buildString(_root);
        Console.WriteLine(_outputString.ToString());
        Console.ReadLine();
    }
}

类似于我所编码的样本。但是代码需要是泛型的,并且能够根据输入的文档尽可能深入,但是结构总是类似于这一点。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<report name="ReportName">
    <agency name="agency1">
        <office name="office1"></office>
        <office name="office2"></office>
        <office name="office3"></office>
    </agency>
    <agency name="agency2">
        <office name="office1">
            <agent name="agent Amy"></agent>
    <address name="address line"></address>
        </office>
        <office name="office2"></office>
        <office name="office3"></office>
    </agency>
    <agency name="agency3">
        <office name="office1">
        <agent name="agent Bettie">
            <subagent name="sub-agent bob">
            <phone name="456-789-1230"></phone>
            </subagent>
            <subagent name="sub-agent billy"></subagent>
        </agent>
        <address name="address line">
            <faxnumber name="1234567890"></faxnumber>
        </address>     
        </office>
        <office name="office2"></office>
        <office name="office3"></office>
    </agency>
</report>

结果:

EN

回答 1

Code Review用户

回答已采纳

发布于 2017-10-16 16:41:34

还应补充如下:

  • ReturnNameAsStringbuildString方法都可以是private,因为它们作为public API并不十分有用。
  • 此外,ReturnNameAsString也可以是static,因为它不使用任何私有实例数据。
  • 使用XDocument更容易做到这一点,因为这样就可以欺骗,这实际上是一个一行: var name= XDocument .Parse(xml) .Root .Descendants() .Select(x => x.Attribute("name").Value) .ToList();
票数 8
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/178049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档