给定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
被设置为&#34; FooBarBazQux&#34;,并且循环运行一次而不是我期待的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版本。
答案 0 :(得分:0)
我不知道是否应该将其添加为答案,以便可以将其标记为(或者我会因为我已经将其置于评论中而大喊大叫)
builder.ToString()
答案 1 :(得分:0)
这是一个愚蠢的错误,因为在Android Xamarin项目中启用了“快速部署”。
我的XML文件是由应用程序生成的,如果它不存在 - 我认为在重新部署时,所有应用程序资产都将从设备中删除。事实证明,当启用快速部署时,设备仅更新应用程序的新组件 - 即XML文件未被删除。问题是由XML文件过时引起的。
我认为最初错误的XML文档是由StuartLC指出的潜在问题引起的 - 我必须在某一点上调用builder.AppendLine(doc.Root.Element("widgets").Value)
,它返回窗口小部件的所有子元素值的串联。
感谢您的帮助!