2017-02-22 118 views
0

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

到目前为止,我可以抓住桌面的一个孩子并将其写入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

XML是一种数据格式 - 不是显示格式。 IE如何选择显示XML文档(没有样式表),完全取决于它,显然这是它选择显示具有混合内容的XML元素的方式。 –

+0

如果您想查看真实XML的样子,请在记事本或记事本++(或某些类似的文本编辑器,即使在Visual Studio中)中打开它。正如Damien_The_Unbeliever所说...... IE浏览器正在以它想要的方式显示XML。不是你总是期待的方式。 –

回答

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将它们显示为“等于” - 都嵌套在它们的父元素下并且在相同的缩进级别下。

相关问题