使用 XDocument 将 XML 元素值连接到字符串



给定一个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),它返回小部件所有子元素的值的串联。

感谢所有的帮助!

相关内容

  • 没有找到相关文章

最新更新