XmlElement InnerText属性

时间:2017-02-22 15:23:05

标签: c# xml ui-automation

我正在深入研究XmlDocument构建的世界,并认为我会尝试重新构建(至少部分)由Microsoft的程序UISpy提供的桌面树。

到目前为止,我能够抓住桌面的一个孩子并将其写入XML文档,然后抓住每个孩子并将其写入XML文档。

到目前为止,代码看起来像这样......

using System.Windows.Automation;
using System.Xml;

namespace MyTestApplication
{
    internal class TestXmlStuff
    {
        public static void Main(string[] args)
        {
            XmlDocument xDocument = new XmlDocument();
            AutomationElement rootElement = AutomationElement.RootElement;
            TreeWalker treeWalker = TreeWalker.ContentViewWalker;

            XmlNode rootXmlElement = xDocument.AppendChild(xDocument.CreateElement("Desktop"));
            AutomationElement autoElement = rootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "GitHub"));
            string name = autoElement.Current.Name;

            while (autoElement != null)
            {
                string lct = autoElement.Current.LocalizedControlType.Replace(" ", "");
                lct = (lct.Equals("") ? "Cusotm" : lct);
                XmlElement temp = (XmlElement)rootXmlElement.AppendChild(xDocument.CreateElement(lct));
                //temp.InnerText = lct;
                string outerXML = temp.OuterXml;
                rootXmlElement = temp;
                autoElement = treeWalker.GetNextSibling(autoElement);
            }
        }   
    }
}

...以及生成的XML文件...

Test XML File

现在,当我添加一行来更改每个XML元素的InnerText属性时,如temp.InnerText = lct我得到一个奇怪的格式化XML文件。

enter image description here

我对此的期望是每个InnerText与XML元素的开始和结束标记位于同一行,但是除了最后一个元素的InnerText之外的所有内容都位于新行上。

所以我的问题是,为什么呢?我可以用我的XML元素做些什么来让他们的InnerText出现在同一行吗?

1 个答案:

答案 0 :(得分:1)

正如我在评论中所说,XML不是一种显示格式,因此它会被格式化,但IE会选择这样做。

为了更接近您的期望,您可能需要考虑使用属性而不是innertext:

XmlElement temp = (XmlElement)rootXmlElement.AppendChild(xDocument.CreateElement(lct));
var attr = xDocument.CreateAttribute("type");
attr.Value = lct;
temp.Attributes.Append(attr);

IE在开始元素中显示属性,这可能足以满足您的需要。

从XML的角度来看,您当前创建的内容称为混合内容 - 您有一个包含文本和其他元素的元素。从层次结构的角度来看,那些文本节点和其他元素在层次结构中占据相同的位置 - 所以我假设这就是为什么IE将它们显示为"等于" - 两者都嵌套在其父元素下并且处于相同的缩进级别。