我正在深入研究XmlDocument构建的世界,并想尝试重新构建(至少部分)微软程序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);
}
}
}
}...and生成的XML文件..。

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

我所期望的是,每个InnerText将与XML元素的开始和结束标记位于同一行上,但是,除了最后一个元素的InnerText之外,所有的XML都位于新的行中。
所以我的问题是,为什么?我还可以用我的XML元素做些什么,让它们的InnerText出现在同一行中吗?
发布于 2017-02-22 15:48:20
正如我在评论中所说的,XML不是一种显示格式,因此它会被格式化,但是IE选择这样做。
为了更接近您所期望的内容,您可能需要考虑使用属性而不是内部文本:
XmlElement temp = (XmlElement)rootXmlElement.AppendChild(xDocument.CreateElement(lct));
var attr = xDocument.CreateAttribute("type");
attr.Value = lct;
temp.Attributes.Append(attr);IE在开头元素中显示属性,这对您的目的可能足够好。
从XML的角度来看,您当前创建的内容称为混合内容--您有一个包含文本和其他元素的元素。从层次结构的角度来看,这些文本节点和其他元素在层次结构中占据相同的位置--所以我假设这就是IE将它们显示为“相等”的原因--它们都嵌套在父元素下面,并且处于相同的缩进级别。
https://stackoverflow.com/questions/42395558
复制相似问题