给定一个XML文档 - 例如:
<factory>
<widgets>
<widget>Foo</widget>
<widget>Bar</widget>
<widget>Baz</widget>
<widget>Qux</widget>
</widgets>
</factory>
我希望构建一个以换行符分隔的小部件值字符串 - 使用上面的 XML,这将是:
Foo
Bar
Baz
Qux
我用来执行此操作的代码是:
var doc = XDocument.Parse(xml) //where XML is a string containing the above XML
var builder = new StringBuilder();
foreach(var widget in doc.Root.Element("widgets").Elements("widget"))
{
builder.AppendLine(widget.Value);
}
但是,生成的字符串是FooBarBazQux
的,而不是换行符分隔的版本。在 AppendLine 调用上设置断点显示widget.Value
被设置为"FooBarBazQux",并且循环运行一次而不是我预期的 4 次。
我尝试在 LinqPad 中运行查询:
XDocument settings = XDocument.Parse (@"
<factory>
<widgets>
<widget>Foo</widget>
<widget>Bar</widget>
<widget>Baz</widget>
<widget>Qux</widget>
</widgets>
</factory>");
foreach(var x in settings.Root.Elements("widgets").Elements("widget"))
x.Value.Dump("Widget Type");
结果是正确的,符合预期。
谁能帮我获取换行符分隔的Widget
值字符串?我有点不知所措!
值得注意的是,这是在Xamarin.Forms应用程序中,使用使用System.Xml.Linq的PCL版本。
我是否应该将其添加为答案,以便可以将其标记为这样(或者我是否会因为已经将其放在评论中而被大喊大叫)
建筑工人。ToString()
这是一个愚蠢的错误,由Android Xamarin项目中启用的"快速部署"引起。
我的 XML 文件是由应用程序生成的(如果它不存在) - 我假设在重新部署时,所有应用程序资产都将从设备中删除。事实证明,启用快速部署后,设备仅更新应用程序的新组件 - 即未删除 XML 文件。该问题是由 XML 文件过期引起的。
我相信XML文档最初不正确是由StuartLC指出的潜在问题引起的 - 我必须在某一点上调用builder.AppendLine(doc.Root.Element("widgets").Value)
,它返回小部件所有子元素的值的串联。
感谢所有的帮助!